@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,356 @@
1
+ // (Slice 1) — the Expo Router convention parser.
2
+ //
3
+ // Expo Router is file-system routing: every file under `app/` (or `src/app/`)
4
+ // is a route, derived from its PATH. This parser builds the convention-agnostic
5
+ // RouteTree (route-tree.ts) for that convention:
6
+ // * route TREE (paths + roles + parent nesting) from file PATHS/NAMES alone —
7
+ // no source content needed;
8
+ // * nav EDGES from statically-resolvable `<Link href>` / `<Redirect href>` /
9
+ // `router.push|replace|navigate('…')` / `redirect('…')` targets — these DO
10
+ // read source CONTENT (install-free ts-morph, the same parsing style as the
11
+ // structural extractor + the RN adapter).
12
+ //
13
+ // Never-store-source: this reads the route dir + file contents server-side and
14
+ // returns ONLY the derived tree/edges. It persists nothing itself (the library
15
+ // is pure; the consuming adapter declares `scansSourcePath` and the pipeline
16
+ // persists only the derived data Slice B / ).
17
+ //
18
+ // Filename → role + URL rules (Expo Router):
19
+ // * `_layout.{tsx,ts,jsx,js}` → role `layout`; governs its dir's URL
20
+ // * `*+api.{ts,js}` · `+html.*` → role `endpoint` (server / web shell)
21
+ // * `index.*` → the segment ROOT (drops `index`)
22
+ // * `[param].*` / `[...rest].*` → DYNAMIC segment (kept in the path)
23
+ // * `(group)/…` → route GROUP (stripped from the URL)
24
+ // * any other screen file → role `page`
25
+ //
26
+ // Per the convention, EVERY file under `app/` is a route — so a non-route helper
27
+ // accidentally colocated there (e.g. `app/utils/format.ts`) becomes a phantom
28
+ // `page`. That's the documented Expo gotcha (keep non-route code out of `app/`),
29
+ // not a parser bug; a default-export check to demote such files to `route` is a
30
+ // Slice-2 refinement.
31
+ //
32
+ // Nesting (NOT an edge — locked): a route's `parentFileId` is the nearest
33
+ // enclosing `_layout`; a layout's parent is the nearest layout in an ANCESTOR
34
+ // dir; the root layout has none.
35
+ import { readdirSync, statSync } from 'node:fs';
36
+ import { join } from 'node:path';
37
+ import { SyntaxKind } from 'ts-morph';
38
+ import { buildExtractionProject, toId } from '../../graph/ts-morph-adapter.js';
39
+ import { SOURCE_EXTENSIONS, EXCLUDE_DIRS } from '../../graph/file-graph.js';
40
+ import { buildHrefResolver } from './route-tree.js';
41
+ export const EXPO_ROUTER_CONVENTION = 'expo-router';
42
+ const SOURCE_EXT_SET = new Set(SOURCE_EXTENSIONS);
43
+ const EXCLUDE_SET = new Set(EXCLUDE_DIRS);
44
+ // `router.<m>('…')` methods whose first arg is a navigation target.
45
+ const ROUTER_NAV_METHODS = new Set(['push', 'replace', 'navigate']);
46
+ // The identifier(s) that name the Expo Router imperative API in practice
47
+ // (`const router = useRouter(); router.push(…)`, or the imported `router`).
48
+ // DELIBERATELY a literal name match: a `useRouter()` result bound to a DIFFERENT
49
+ // name (`const nav = useRouter(); nav.push(…)`) is not recognized as a nav call
50
+ // — so it's not a dropped target either (it's just not seen). Tracking the
51
+ // binding is a Slice-2 refinement; `router` is the overwhelming convention.
52
+ const ROUTER_RECEIVERS = new Set(['router']);
53
+ // JSX components whose `href` prop is a navigation target.
54
+ const NAV_COMPONENTS = new Set(['Link', 'Redirect']);
55
+ // Bare function nav (`redirect('/x')`). NOT an Expo Router primitive — included
56
+ // for the SHARED/Next path (Next's `redirect()`); harmless under Expo since it
57
+ // only emits an edge when its string arg resolves to a real route.
58
+ const NAV_FUNCS = new Set(['redirect']);
59
+ function isDir(p) {
60
+ try {
61
+ return statSync(p).isDirectory();
62
+ }
63
+ catch {
64
+ return false;
65
+ }
66
+ }
67
+ /**
68
+ * Locate the Expo Router route dir for a repo (or workspace package). Expo
69
+ * Router lives at `app/` or `src/app/`. Returns the ABSOLUTE dir, or `null`.
70
+ */
71
+ export function findExpoRouterAppDir(repoDir, rootPath = '') {
72
+ const base = rootPath ? join(repoDir, rootPath) : repoDir;
73
+ for (const cand of ['app', join('src', 'app')]) {
74
+ const abs = join(base, cand);
75
+ if (isDir(abs))
76
+ return abs;
77
+ }
78
+ return null;
79
+ }
80
+ // Recursively collect repo-relative posix file ids of source files under a dir,
81
+ // skipping dot-entries + excluded dirs (mirror the extractor's glob). Sorted.
82
+ function walkSourceFiles(absDir, repoDir) {
83
+ const out = [];
84
+ const stack = [absDir];
85
+ while (stack.length > 0) {
86
+ const dir = stack.pop();
87
+ let entries;
88
+ try {
89
+ entries = readdirSync(dir, { withFileTypes: true });
90
+ }
91
+ catch {
92
+ continue;
93
+ }
94
+ for (const e of entries) {
95
+ if (e.name.startsWith('.'))
96
+ continue; // Expo Router ignores dot-entries
97
+ const abs = join(dir, e.name);
98
+ if (e.isDirectory()) {
99
+ if (EXCLUDE_SET.has(e.name))
100
+ continue;
101
+ stack.push(abs);
102
+ }
103
+ else if (e.isFile()) {
104
+ const ext = e.name.split('.').pop();
105
+ if (ext && SOURCE_EXT_SET.has(ext))
106
+ out.push(toId(repoDir, abs));
107
+ }
108
+ }
109
+ }
110
+ return out.sort();
111
+ }
112
+ function stripExt(name) {
113
+ return name.replace(/\.[^.]+$/, '');
114
+ }
115
+ function isGroupSeg(seg) {
116
+ return seg.startsWith('(') && seg.endsWith(')');
117
+ }
118
+ // Derive role + URL-shaped route path from a route file's path relative to the
119
+ // route root dir (e.g. 'profile/[id].tsx', '_layout.tsx', '(tabs)/home.tsx',
120
+ // 'hello+api.ts'). Pure — no content read.
121
+ export function expoRouteInfo(relToRoot) {
122
+ const segments = relToRoot.split('/');
123
+ const fileName = segments.pop() ?? relToRoot;
124
+ const dirSegments = segments;
125
+ const stem = stripExt(fileName);
126
+ let role;
127
+ let urlSegments;
128
+ if (stem === '_layout') {
129
+ role = 'layout';
130
+ urlSegments = [...dirSegments]; // a layout governs its directory's URL
131
+ }
132
+ else if (stem === '+html') {
133
+ role = 'endpoint';
134
+ urlSegments = [...dirSegments, '+html'];
135
+ }
136
+ else if (stem.endsWith('+api')) {
137
+ role = 'endpoint';
138
+ const apiStem = stem.slice(0, -'+api'.length);
139
+ urlSegments = apiStem === '' ? [...dirSegments] : [...dirSegments, apiStem];
140
+ }
141
+ else {
142
+ role = 'page';
143
+ urlSegments = stem === 'index' ? [...dirSegments] : [...dirSegments, stem];
144
+ }
145
+ const visible = urlSegments.filter((s) => !isGroupSeg(s)); // route groups don't appear in the URL
146
+ const routePath = visible.length > 0 ? `/${visible.join('/')}` : '/';
147
+ return { routePath, role };
148
+ }
149
+ // dir of a repo-relative file id ('app/profile/[id].tsx' → 'app/profile').
150
+ function dirOf(fileId) {
151
+ const i = fileId.lastIndexOf('/');
152
+ return i === -1 ? '' : fileId.slice(0, i);
153
+ }
154
+ // Ancestor dirs from `dir` up to (and including) `rootDir`, nearest first.
155
+ function ancestorDirs(dir, rootDir) {
156
+ const out = [];
157
+ let cur = dir;
158
+ // Walk up while still inside (or equal to) the route root.
159
+ while (cur === rootDir || cur.startsWith(`${rootDir}/`)) {
160
+ out.push(cur);
161
+ if (cur === rootDir)
162
+ break;
163
+ cur = dirOf(cur);
164
+ }
165
+ return out;
166
+ }
167
+ // ---------------------------------------------------------------------------
168
+ // Nav-target extraction (reads source content via ts-morph).
169
+ // A string nav target from a literal arg/attr: a bare string literal, or an
170
+ // object literal's `pathname` string (`<Link href={{ pathname:'/x', params }}>`,
171
+ // `router.push({ pathname:'/x' })`). Anything else (template literal, variable)
172
+ // → null (a DYNAMIC target the caller logs + skips).
173
+ function literalTarget(node) {
174
+ if (!node)
175
+ return null;
176
+ if (node.getKind() === SyntaxKind.StringLiteral)
177
+ return node.getLiteralValue();
178
+ if (node.getKind() === SyntaxKind.ObjectLiteralExpression) {
179
+ const pathname = node.getProperty('pathname');
180
+ if (pathname && pathname.getKind() === SyntaxKind.PropertyAssignment) {
181
+ const init = pathname.getInitializer();
182
+ if (init && init.getKind() === SyntaxKind.StringLiteral)
183
+ return init.getLiteralValue();
184
+ }
185
+ }
186
+ return null;
187
+ }
188
+ // Pull nav targets from one source file: <Link href> / <Redirect href> JSX
189
+ // attributes + router.push|replace|navigate('…') + redirect('…') calls.
190
+ function collectNavTargets(sf) {
191
+ const literals = [];
192
+ let dynamic = 0;
193
+ // JSX <Link href> / <Redirect href>.
194
+ const jsxEls = [
195
+ ...sf.getDescendantsOfKind(SyntaxKind.JsxOpeningElement),
196
+ ...sf.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement),
197
+ ];
198
+ for (const el of jsxEls) {
199
+ const tag = el.getTagNameNode().getText();
200
+ const local = tag.split('.').pop() ?? tag; // `ExpoRouter.Link` → `Link`
201
+ if (!NAV_COMPONENTS.has(local))
202
+ continue;
203
+ const hrefAttr = el.getAttribute('href');
204
+ if (!hrefAttr || hrefAttr.getKind() !== SyntaxKind.JsxAttribute)
205
+ continue;
206
+ const init = hrefAttr.getInitializer();
207
+ if (!init)
208
+ continue;
209
+ let target = null;
210
+ if (init.getKind() === SyntaxKind.StringLiteral) {
211
+ target = init.getLiteralValue();
212
+ }
213
+ else if (init.getKind() === SyntaxKind.JsxExpression) {
214
+ target = literalTarget(init.getExpression());
215
+ }
216
+ if (target !== null)
217
+ literals.push(target);
218
+ else
219
+ dynamic++;
220
+ }
221
+ // router.push|replace|navigate('…') + redirect('…').
222
+ for (const call of sf.getDescendantsOfKind(SyntaxKind.CallExpression)) {
223
+ const callee = call.getExpression();
224
+ let isNav = false;
225
+ if (callee.getKind() === SyntaxKind.PropertyAccessExpression) {
226
+ const pae = callee;
227
+ const base = pae.getExpression();
228
+ isNav =
229
+ ROUTER_NAV_METHODS.has(pae.getName()) &&
230
+ base.getKind() === SyntaxKind.Identifier &&
231
+ ROUTER_RECEIVERS.has(base.getText());
232
+ }
233
+ else if (callee.getKind() === SyntaxKind.Identifier) {
234
+ isNav = NAV_FUNCS.has(callee.getText());
235
+ }
236
+ if (!isNav)
237
+ continue;
238
+ const arg = call.getArguments()[0];
239
+ if (!arg)
240
+ continue; // `router.back()`-style no-arg → not a target
241
+ const target = literalTarget(arg);
242
+ if (target !== null)
243
+ literals.push(target);
244
+ else
245
+ dynamic++;
246
+ }
247
+ return { literals, dynamic };
248
+ }
249
+ // ---------------------------------------------------------------------------
250
+ // The convention entrypoint.
251
+ /**
252
+ * Extract the Expo Router route tree for a repo (or workspace package). Returns
253
+ * `null` when there is no Expo Router `app/` dir or it holds no route files
254
+ * (→ the caller contributes nothing). Output is fully deterministic (routes
255
+ * sorted by fileId; navEdges deduped + sorted) — snapshot-stable by construction.
256
+ */
257
+ export function extractExpoRouterTree(opts) {
258
+ const { repoDir } = opts;
259
+ const rootPath = opts.rootPath ?? '';
260
+ const appDirAbs = findExpoRouterAppDir(repoDir, rootPath);
261
+ if (!appDirAbs)
262
+ return null;
263
+ const rootDir = toId(repoDir, appDirAbs); // repo-relative posix, e.g. 'app' or 'apps/mobile/app'
264
+ const fileIds = walkSourceFiles(appDirAbs, repoDir);
265
+ if (fileIds.length === 0)
266
+ return null;
267
+ // --- route nodes (paths + roles) from file paths -------------------------
268
+ const routes = [];
269
+ const layoutByDir = new Map(); // dir → layout fileId (one per dir; lexical-first)
270
+ for (const fileId of fileIds) {
271
+ // fileId is always `${rootDir}/<suffix>` (walkSourceFiles ran under rootDir),
272
+ // so a slice is exact + platform-independent (no cwd-relative resolution).
273
+ const relToRoot = fileId.slice(rootDir.length + 1);
274
+ const { routePath, role } = expoRouteInfo(relToRoot);
275
+ routes.push({ routePath, fileId, role });
276
+ if (role === 'layout') {
277
+ const dir = dirOf(fileId);
278
+ if (!layoutByDir.has(dir))
279
+ layoutByDir.set(dir, fileId);
280
+ }
281
+ }
282
+ // --- nesting (parentFileId = nearest enclosing layout) -------------------
283
+ for (const node of routes) {
284
+ const fileDir = dirOf(node.fileId);
285
+ // A layout's own dir-layout is itself; its parent must be a STRICT ancestor.
286
+ const searchDirs = node.role === 'layout'
287
+ ? ancestorDirs(fileDir, rootDir).slice(1)
288
+ : ancestorDirs(fileDir, rootDir);
289
+ for (const dir of searchDirs) {
290
+ const layoutId = layoutByDir.get(dir);
291
+ if (layoutId && layoutId !== node.fileId) {
292
+ node.parentFileId = layoutId;
293
+ break;
294
+ }
295
+ }
296
+ }
297
+ routes.sort((a, b) => (a.fileId < b.fileId ? -1 : a.fileId > b.fileId ? 1 : 0));
298
+ // --- nav edges (statically-resolvable targets; reads source content) -----
299
+ const resolve = buildHrefResolver(routes);
300
+ const project = buildExtractionProject(repoDir);
301
+ const sfById = new Map();
302
+ for (const fileId of fileIds) {
303
+ try {
304
+ sfById.set(fileId, project.addSourceFileAtPath(join(repoDir, fileId)));
305
+ }
306
+ catch {
307
+ // Unreadable / unparseable route file — skip its nav edges (logged below).
308
+ }
309
+ }
310
+ const edgeKeys = new Set();
311
+ const navEdges = [];
312
+ let dynamicTargets = 0;
313
+ const unresolvedTargets = new Set();
314
+ for (const fileId of fileIds) {
315
+ const sf = sfById.get(fileId);
316
+ if (!sf)
317
+ continue;
318
+ const { literals, dynamic } = collectNavTargets(sf);
319
+ dynamicTargets += dynamic;
320
+ for (const href of literals) {
321
+ const targetFile = resolve(href);
322
+ if (!targetFile) {
323
+ unresolvedTargets.add(href);
324
+ continue;
325
+ }
326
+ if (targetFile === fileId)
327
+ continue; // self-navigation — not a route→route edge
328
+ const key = `${fileId}→${targetFile}`;
329
+ if (edgeKeys.has(key))
330
+ continue;
331
+ edgeKeys.add(key);
332
+ navEdges.push({ fromFileId: fileId, toFileId: targetFile });
333
+ }
334
+ }
335
+ navEdges.sort((a, b) => a.fromFileId < b.fromFileId
336
+ ? -1
337
+ : a.fromFileId > b.fromFileId
338
+ ? 1
339
+ : a.toFileId < b.toFileId
340
+ ? -1
341
+ : a.toFileId > b.toFileId
342
+ ? 1
343
+ : 0);
344
+ // No silent caps: log every dynamic + unresolvable nav target once.
345
+ if (dynamicTargets > 0 || unresolvedTargets.size > 0) {
346
+ const parts = [];
347
+ if (dynamicTargets > 0)
348
+ parts.push(`${dynamicTargets} dynamic target(s)`);
349
+ if (unresolvedTargets.size > 0) {
350
+ parts.push(`${unresolvedTargets.size} unresolvable target(s): ${[...unresolvedTargets].sort().join(', ')}`);
351
+ }
352
+ console.log(` [expo-router] skipped ${parts.join(' · ')} (logged, not silently dropped)`);
353
+ }
354
+ return { convention: EXPO_ROUTER_CONVENTION, rootDir, routes, navEdges };
355
+ }
356
+ //# sourceMappingURL=expo-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expo-router.js","sourceRoot":"","sources":["../../../src/framework/routing/expo-router.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,EAAE;AACF,8EAA8E;AAC9E,gFAAgF;AAChF,iDAAiD;AACjD,gFAAgF;AAChF,gCAAgC;AAChC,+EAA+E;AAC/E,+EAA+E;AAC/E,gFAAgF;AAChF,8CAA8C;AAC9C,EAAE;AACF,+EAA+E;AAC/E,+EAA+E;AAC/E,6EAA6E;AAC7E,8CAA8C;AAC9C,EAAE;AACF,6CAA6C;AAC7C,kFAAkF;AAClF,kFAAkF;AAClF,8EAA8E;AAC9E,gFAAgF;AAChF,iFAAiF;AACjF,yDAAyD;AACzD,EAAE;AACF,iFAAiF;AACjF,8EAA8E;AAC9E,iFAAiF;AACjF,gFAAgF;AAChF,sBAAsB;AACtB,EAAE;AACF,0EAA0E;AAC1E,8EAA8E;AAC9E,iCAAiC;AAEjC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,UAAU,EAAmJ,MAAM,UAAU,CAAC;AACvL,OAAO,EAAE,sBAAsB,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAqE,MAAM,iBAAiB,CAAC;AAEvH,MAAM,CAAC,MAAM,sBAAsB,GAAG,aAAa,CAAC;AAEpD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAS,iBAAiB,CAAC,CAAC;AAC1D,MAAM,WAAW,GAAG,IAAI,GAAG,CAAS,YAAY,CAAC,CAAC;AAElD,oEAAoE;AACpE,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;AACpE,yEAAyE;AACzE,4EAA4E;AAC5E,iFAAiF;AACjF,gFAAgF;AAChF,2EAA2E;AAC3E,4EAA4E;AAC5E,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC7C,2DAA2D;AAC3D,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AACrD,gFAAgF;AAChF,+EAA+E;AAC/E,mEAAmE;AACnE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAaxC,SAAS,KAAK,CAAC,CAAS;IACtB,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe,EAAE,QAAQ,GAAG,EAAE;IACjE,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAC1D,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;QAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7B,IAAI,KAAK,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC;IAC7B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,gFAAgF;AAChF,8EAA8E;AAC9E,SAAS,eAAe,CAAC,MAAc,EAAE,OAAe;IACtD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;QACzB,IAAI,OAAmC,CAAC;QACxC,IAAI,CAAC;YACH,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS,CAAC,kCAAkC;YACxE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;gBACpB,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;oBAAE,SAAS;gBACtC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClB,CAAC;iBAAM,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;gBACtB,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;gBACpC,IAAI,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAClD,CAAC;AAOD,+EAA+E;AAC/E,6EAA6E;AAC7E,2CAA2C;AAC3C,MAAM,UAAU,aAAa,CAAC,SAAiB;IAC7C,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,SAAS,CAAC;IAC7C,MAAM,WAAW,GAAG,QAAQ,CAAC;IAC7B,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEhC,IAAI,IAAe,CAAC;IACpB,IAAI,WAAqB,CAAC;IAE1B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,IAAI,GAAG,QAAQ,CAAC;QAChB,WAAW,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,uCAAuC;IACzE,CAAC;SAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,IAAI,GAAG,UAAU,CAAC;QAClB,WAAW,GAAG,CAAC,GAAG,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;SAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,IAAI,GAAG,UAAU,CAAC;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9C,WAAW,GAAG,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,EAAE,OAAO,CAAC,CAAC;IAC9E,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,MAAM,CAAC;QACd,WAAW,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,EAAE,IAAI,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,uCAAuC;IAClG,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IACrE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED,2EAA2E;AAC3E,SAAS,KAAK,CAAC,MAAc;IAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,2EAA2E;AAC3E,SAAS,YAAY,CAAC,GAAW,EAAE,OAAe;IAChD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,GAAG,GAAG,GAAG,CAAC;IACd,2DAA2D;IAC3D,OAAO,GAAG,KAAK,OAAO,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACd,IAAI,GAAG,KAAK,OAAO;YAAE,MAAM;QAC3B,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,8EAA8E;AAC9E,6DAA6D;AAE7D,4EAA4E;AAC5E,iFAAiF;AACjF,gFAAgF;AAChF,qDAAqD;AACrD,SAAS,aAAa,CAAC,IAAyC;IAC9D,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,UAAU,CAAC,aAAa;QAAE,OAAQ,IAAsB,CAAC,eAAe,EAAE,CAAC;IAClG,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,UAAU,CAAC,uBAAuB,EAAE,CAAC;QAC1D,MAAM,QAAQ,GAAI,IAAgC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAC3E,IAAI,QAAQ,IAAI,QAAQ,CAAC,OAAO,EAAE,KAAK,UAAU,CAAC,kBAAkB,EAAE,CAAC;YACrE,MAAM,IAAI,GAAI,QAA+B,CAAC,cAAc,EAAE,CAAC;YAC/D,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,UAAU,CAAC,aAAa;gBAAE,OAAQ,IAAsB,CAAC,eAAe,EAAE,CAAC;QAC5G,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AASD,2EAA2E;AAC3E,wEAAwE;AACxE,SAAS,iBAAiB,CAAC,EAAc;IACvC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,qCAAqC;IACrC,MAAM,MAAM,GAAG;QACb,GAAG,EAAE,CAAC,oBAAoB,CAAC,UAAU,CAAC,iBAAiB,CAAC;QACxD,GAAG,EAAE,CAAC,oBAAoB,CAAC,UAAU,CAAC,qBAAqB,CAAC;KAC7D,CAAC;IACF,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,6BAA6B;QACxE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,SAAS;QACzC,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,OAAO,EAAE,KAAK,UAAU,CAAC,YAAY;YAAE,SAAS;QAC1E,MAAM,IAAI,GAAI,QAAyB,CAAC,cAAc,EAAE,CAAC;QACzD,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,IAAI,MAAM,GAAkB,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,UAAU,CAAC,aAAa,EAAE,CAAC;YAChD,MAAM,GAAI,IAAsB,CAAC,eAAe,EAAE,CAAC;QACrD,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,UAAU,CAAC,aAAa,EAAE,CAAC;YACvD,MAAM,GAAG,aAAa,CAAE,IAAsB,CAAC,aAAa,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,MAAM,KAAK,IAAI;YAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;YACtC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,qDAAqD;IACrD,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,oBAAoB,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QACtE,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACpC,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,MAAM,CAAC,OAAO,EAAE,KAAK,UAAU,CAAC,wBAAwB,EAAE,CAAC;YAC7D,MAAM,GAAG,GAAG,MAAkC,CAAC;YAC/C,MAAM,IAAI,GAAG,GAAG,CAAC,aAAa,EAAE,CAAC;YACjC,KAAK;gBACH,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;oBACrC,IAAI,CAAC,OAAO,EAAE,KAAK,UAAU,CAAC,UAAU;oBACxC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACzC,CAAC;aAAM,IAAI,MAAM,CAAC,OAAO,EAAE,KAAK,UAAU,CAAC,UAAU,EAAE,CAAC;YACtD,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,GAAG;YAAE,SAAS,CAAC,8CAA8C;QAClE,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,MAAM,KAAK,IAAI;YAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;YACtC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAC/B,CAAC;AAED,8EAA8E;AAC9E,6BAA6B;AAE7B;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAuB;IAC3D,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;IACrC,MAAM,SAAS,GAAG,oBAAoB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC1D,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,uDAAuD;IACjG,MAAM,OAAO,GAAG,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACpD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtC,4EAA4E;IAC5E,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC,CAAC,mDAAmD;IAClG,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,8EAA8E;QAC9E,2EAA2E;QAC3E,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACnD,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,6EAA6E;QAC7E,MAAM,UAAU,GACd,IAAI,CAAC,IAAI,KAAK,QAAQ;YACpB,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YACzC,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACrC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACtC,IAAI,QAAQ,IAAI,QAAQ,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;gBACzC,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC;gBAC7B,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEhF,4EAA4E;IAC5E,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC7C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QACzE,CAAC;QAAC,MAAM,CAAC;YACP,2EAA2E;QAC7E,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;IAE5C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE;YAAE,SAAS;QAClB,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;QACpD,cAAc,IAAI,OAAO,CAAC;QAC1B,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC5B,SAAS;YACX,CAAC;YACD,IAAI,UAAU,KAAK,MAAM;gBAAE,SAAS,CAAC,2CAA2C;YAChF,MAAM,GAAG,GAAG,GAAG,MAAM,IAAI,UAAU,EAAE,CAAC;YACtC,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAChC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClB,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACrB,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU;QACzB,CAAC,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU;YAC3B,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ;gBACvB,CAAC,CAAC,CAAC,CAAC;gBACJ,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ;oBACvB,CAAC,CAAC,CAAC;oBACH,CAAC,CAAC,CAAC,CACZ,CAAC;IAEF,oEAAoE;IACpE,IAAI,cAAc,GAAG,CAAC,IAAI,iBAAiB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACrD,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,cAAc,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,cAAc,oBAAoB,CAAC,CAAC;QAC1E,IAAI,iBAAiB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,IAAI,4BAA4B,CAAC,GAAG,iBAAiB,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9G,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,2BAA2B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAC7F,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC3E,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { type RouteRole, type RouteNode, type RouteNavEdge, type RouteTree, ROUTE_ROLES, normalizeHref, buildHrefResolver, } from './route-tree.js';
2
+ export { type ExpoRouterOptions, EXPO_ROUTER_CONVENTION, extractExpoRouterTree, findExpoRouterAppDir, expoRouteInfo, } from './expo-router.js';
3
+ export { type NextRouter, NEXT_CONVENTION, extractNextRouteTree, findNextRouteDirs, walkNextSourceFiles, nextRouteInfo, nextSegmentKey, } from './next-router.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/framework/routing/index.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,WAAW,EACX,aAAa,EACb,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,KAAK,iBAAiB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,GACd,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,KAAK,UAAU,EACf,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,cAAc,GACf,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,16 @@
1
+ // (Slice 1) — the shared file-based-routing extractor.
2
+ //
3
+ // A pure, reusable LIBRARY (no pipeline wiring): a convention-agnostic route-tree
4
+ // model + the Expo Router convention parser. The RN/Expo adapter ( Slice
5
+ // B) and the Next.js adapter call these from their FrameworkAdapter
6
+ // hooks and map the RouteTree onto contribute-step contributions:
7
+ // * navEdges → `syntheticEdges` (each a `calls` FrameworkEdge — nav = `calls`)
8
+ // * routes → `roleTags` (role per fileId; the adapter maps role → ModuleKind)
9
+ // * routePath + parentFileId → carried as nesting METADATA (NOT an edge)
10
+ //
11
+ // Slice 1 of 2: Expo Router only. Next (app + pages) / Remix / Nuxt / SvelteKit /
12
+ // TanStack are Slice 2 (partly folded into ).
13
+ export { ROUTE_ROLES, normalizeHref, buildHrefResolver, } from './route-tree.js';
14
+ export { EXPO_ROUTER_CONVENTION, extractExpoRouterTree, findExpoRouterAppDir, expoRouteInfo, } from './expo-router.js';
15
+ export { NEXT_CONVENTION, extractNextRouteTree, findNextRouteDirs, walkNextSourceFiles, nextRouteInfo, nextSegmentKey, } from './next-router.js';
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/framework/routing/index.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,EAAE;AACF,kFAAkF;AAClF,yEAAyE;AACzE,oEAAoE;AACpE,kEAAkE;AAClE,kFAAkF;AAClF,mFAAmF;AACnF,4EAA4E;AAC5E,EAAE;AACF,kFAAkF;AAClF,8CAA8C;AAE9C,OAAO,EAKL,WAAW,EACX,aAAa,EACb,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAEL,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,GACd,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAEL,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,cAAc,GACf,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { type RouteRole, type RouteTree } from './route-tree.js';
2
+ export declare const NEXT_CONVENTION = "next";
3
+ /** Which Next router a route dir belongs to. */
4
+ export type NextRouter = 'app' | 'pages';
5
+ /**
6
+ * Locate the Next route dirs for a repo (or workspace package). Next uses EITHER
7
+ * the repo-root layout (`app` / `pages`) OR the `src/` layout (`src/app` /
8
+ * `src/pages`) — root takes precedence. Both routers can co-exist (a migration).
9
+ */
10
+ export declare function findNextRouteDirs(repoDir: string, rootPath?: string): {
11
+ appDirAbs: string | null;
12
+ pagesDirAbs: string | null;
13
+ };
14
+ /**
15
+ * Recursively collect repo-relative posix file ids of source files under a dir,
16
+ * skipping dot-entries + excluded dirs (mirror expo-router's walk). Sorted.
17
+ */
18
+ export declare function walkNextSourceFiles(absDir: string, repoDir: string): string[];
19
+ /**
20
+ * Derive role + URL-shaped route path from a route file's path relative to its
21
+ * route-root dir, or `null` when the file is NOT a route node (an App Router
22
+ * co-located component, or `pages/_document`). Pure — no content read.
23
+ */
24
+ export declare function nextRouteInfo(relToRoot: string, router: NextRouter): {
25
+ routePath: string;
26
+ role: RouteRole;
27
+ } | null;
28
+ /**
29
+ * The top-level route SEGMENT key a file belongs to (for the route-segment
30
+ * grouping prior): the first URL-visible directory segment, or `''` (the root
31
+ * segment) for a file sitting directly in the route root (or only inside
32
+ * groups/slots). Pure — path only.
33
+ */
34
+ export declare function nextSegmentKey(relToRoot: string, _router: NextRouter): string;
35
+ /**
36
+ * Extract the Next route tree for a repo (or workspace package), spanning BOTH
37
+ * the App Router and Pages Router when present (a migration). Returns `null` when
38
+ * neither route dir exists or holds route files. Fully deterministic (routes
39
+ * sorted by fileId; navEdges deduped + sorted) — snapshot-stable by construction.
40
+ */
41
+ export declare function extractNextRouteTree(opts: {
42
+ repoDir: string;
43
+ rootPath?: string;
44
+ }): RouteTree | null;
45
+ //# sourceMappingURL=next-router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next-router.d.ts","sourceRoot":"","sources":["../../../src/framework/routing/next-router.ts"],"names":[],"mappings":"AA0CA,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,iBAAiB,CAAC;AAEzB,eAAO,MAAM,eAAe,SAAS,CAAC;AAEtC,gDAAgD;AAChD,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,OAAO,CAAC;AAyBzC;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,QAAQ,SAAK,GACZ;IAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAa1D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAwB7E;AAaD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,UAAU,GACjB;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAAG,IAAI,CA0B/C;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,MAAM,CAK7E;AAyGD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,SAAS,GAAG,IAAI,CAgHnB"}