@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.
- package/LICENSE +21 -0
- package/README.md +83 -0
- package/dist/cluster/domain-grouping.d.ts +113 -0
- package/dist/cluster/domain-grouping.d.ts.map +1 -0
- package/dist/cluster/domain-grouping.js +277 -0
- package/dist/cluster/domain-grouping.js.map +1 -0
- package/dist/cluster/grouping-gate.d.ts +54 -0
- package/dist/cluster/grouping-gate.d.ts.map +1 -0
- package/dist/cluster/grouping-gate.js +0 -0
- package/dist/cluster/grouping-gate.js.map +1 -0
- package/dist/cluster/louvain.d.ts +88 -0
- package/dist/cluster/louvain.d.ts.map +1 -0
- package/dist/cluster/louvain.js +674 -0
- package/dist/cluster/louvain.js.map +1 -0
- package/dist/cluster/overrides.d.ts +19 -0
- package/dist/cluster/overrides.d.ts.map +1 -0
- package/dist/cluster/overrides.js +32 -0
- package/dist/cluster/overrides.js.map +1 -0
- package/dist/cluster/subsystem.d.ts +45 -0
- package/dist/cluster/subsystem.d.ts.map +1 -0
- package/dist/cluster/subsystem.js +299 -0
- package/dist/cluster/subsystem.js.map +1 -0
- package/dist/cluster/workspaces.d.ts +64 -0
- package/dist/cluster/workspaces.d.ts.map +1 -0
- package/dist/cluster/workspaces.js +739 -0
- package/dist/cluster/workspaces.js.map +1 -0
- package/dist/extract.d.ts +52 -0
- package/dist/extract.d.ts.map +1 -0
- package/dist/extract.js +48 -0
- package/dist/extract.js.map +1 -0
- package/dist/framework/celery/celery.d.ts +17 -0
- package/dist/framework/celery/celery.d.ts.map +1 -0
- package/dist/framework/celery/celery.js +524 -0
- package/dist/framework/celery/celery.js.map +1 -0
- package/dist/framework/contribute-step.d.ts +38 -0
- package/dist/framework/contribute-step.d.ts.map +1 -0
- package/dist/framework/contribute-step.js +403 -0
- package/dist/framework/contribute-step.js.map +1 -0
- package/dist/framework/detect-step.d.ts +8 -0
- package/dist/framework/detect-step.d.ts.map +1 -0
- package/dist/framework/detect-step.js +54 -0
- package/dist/framework/detect-step.js.map +1 -0
- package/dist/framework/detect-util.d.ts +24 -0
- package/dist/framework/detect-util.d.ts.map +1 -0
- package/dist/framework/detect-util.js +59 -0
- package/dist/framework/detect-util.js.map +1 -0
- package/dist/framework/django/django.d.ts +22 -0
- package/dist/framework/django/django.d.ts.map +1 -0
- package/dist/framework/django/django.js +940 -0
- package/dist/framework/django/django.js.map +1 -0
- package/dist/framework/fastapi/fastapi.d.ts +27 -0
- package/dist/framework/fastapi/fastapi.d.ts.map +1 -0
- package/dist/framework/fastapi/fastapi.js +477 -0
- package/dist/framework/fastapi/fastapi.js.map +1 -0
- package/dist/framework/faststream/faststream.d.ts +19 -0
- package/dist/framework/faststream/faststream.d.ts.map +1 -0
- package/dist/framework/faststream/faststream.js +765 -0
- package/dist/framework/faststream/faststream.js.map +1 -0
- package/dist/framework/flask/flask.d.ts +17 -0
- package/dist/framework/flask/flask.d.ts.map +1 -0
- package/dist/framework/flask/flask.js +507 -0
- package/dist/framework/flask/flask.js.map +1 -0
- package/dist/framework/graphql/graphql.d.ts +17 -0
- package/dist/framework/graphql/graphql.d.ts.map +1 -0
- package/dist/framework/graphql/graphql.js +708 -0
- package/dist/framework/graphql/graphql.js.map +1 -0
- package/dist/framework/grpc/grpc.d.ts +22 -0
- package/dist/framework/grpc/grpc.d.ts.map +1 -0
- package/dist/framework/grpc/grpc.js +618 -0
- package/dist/framework/grpc/grpc.js.map +1 -0
- package/dist/framework/litestar/litestar.d.ts +17 -0
- package/dist/framework/litestar/litestar.d.ts.map +1 -0
- package/dist/framework/litestar/litestar.js +536 -0
- package/dist/framework/litestar/litestar.js.map +1 -0
- package/dist/framework/nest/nest.d.ts +19 -0
- package/dist/framework/nest/nest.d.ts.map +1 -0
- package/dist/framework/nest/nest.js +613 -0
- package/dist/framework/nest/nest.js.map +1 -0
- package/dist/framework/next/next.d.ts +22 -0
- package/dist/framework/next/next.d.ts.map +1 -0
- package/dist/framework/next/next.js +449 -0
- package/dist/framework/next/next.js.map +1 -0
- package/dist/framework/node/node.d.ts +24 -0
- package/dist/framework/node/node.d.ts.map +1 -0
- package/dist/framework/node/node.js +1009 -0
- package/dist/framework/node/node.js.map +1 -0
- package/dist/framework/orchestrator/orchestrator.d.ts +34 -0
- package/dist/framework/orchestrator/orchestrator.d.ts.map +1 -0
- package/dist/framework/orchestrator/orchestrator.js +691 -0
- package/dist/framework/orchestrator/orchestrator.js.map +1 -0
- package/dist/framework/orm/orm.d.ts +61 -0
- package/dist/framework/orm/orm.d.ts.map +1 -0
- package/dist/framework/orm/orm.js +620 -0
- package/dist/framework/orm/orm.js.map +1 -0
- package/dist/framework/python/analyze.d.ts +38 -0
- package/dist/framework/python/analyze.d.ts.map +1 -0
- package/dist/framework/python/analyze.js +98 -0
- package/dist/framework/python/analyze.js.map +1 -0
- package/dist/framework/python/py-ast.d.ts +130 -0
- package/dist/framework/python/py-ast.d.ts.map +1 -0
- package/dist/framework/python/py-ast.js +344 -0
- package/dist/framework/python/py-ast.js.map +1 -0
- package/dist/framework/python-orm/python-orm.d.ts +19 -0
- package/dist/framework/python-orm/python-orm.d.ts.map +1 -0
- package/dist/framework/python-orm/python-orm.js +516 -0
- package/dist/framework/python-orm/python-orm.js.map +1 -0
- package/dist/framework/react-native/react-native.d.ts +35 -0
- package/dist/framework/react-native/react-native.d.ts.map +1 -0
- package/dist/framework/react-native/react-native.js +1181 -0
- package/dist/framework/react-native/react-native.js.map +1 -0
- package/dist/framework/register.d.ts +2 -0
- package/dist/framework/register.d.ts.map +1 -0
- package/dist/framework/register.js +59 -0
- package/dist/framework/register.js.map +1 -0
- package/dist/framework/registry.d.ts +31 -0
- package/dist/framework/registry.d.ts.map +1 -0
- package/dist/framework/registry.js +70 -0
- package/dist/framework/registry.js.map +1 -0
- package/dist/framework/routing/expo-router.d.ts +31 -0
- package/dist/framework/routing/expo-router.d.ts.map +1 -0
- package/dist/framework/routing/expo-router.js +356 -0
- package/dist/framework/routing/expo-router.js.map +1 -0
- package/dist/framework/routing/index.d.ts +4 -0
- package/dist/framework/routing/index.d.ts.map +1 -0
- package/dist/framework/routing/index.js +16 -0
- package/dist/framework/routing/index.js.map +1 -0
- package/dist/framework/routing/next-router.d.ts +45 -0
- package/dist/framework/routing/next-router.d.ts.map +1 -0
- package/dist/framework/routing/next-router.js +378 -0
- package/dist/framework/routing/next-router.js.map +1 -0
- package/dist/framework/routing/route-tree.d.ts +73 -0
- package/dist/framework/routing/route-tree.d.ts.map +1 -0
- package/dist/framework/routing/route-tree.js +120 -0
- package/dist/framework/routing/route-tree.js.map +1 -0
- package/dist/framework/types.d.ts +230 -0
- package/dist/framework/types.d.ts.map +1 -0
- package/dist/framework/types.js +25 -0
- package/dist/framework/types.js.map +1 -0
- package/dist/graph/cross-language.d.ts +11 -0
- package/dist/graph/cross-language.d.ts.map +1 -0
- package/dist/graph/cross-language.js +123 -0
- package/dist/graph/cross-language.js.map +1 -0
- package/dist/graph/extract.d.ts +13 -0
- package/dist/graph/extract.d.ts.map +1 -0
- package/dist/graph/extract.js +79 -0
- package/dist/graph/extract.js.map +1 -0
- package/dist/graph/file-graph.d.ts +186 -0
- package/dist/graph/file-graph.d.ts.map +1 -0
- package/dist/graph/file-graph.js +427 -0
- package/dist/graph/file-graph.js.map +1 -0
- package/dist/graph/http-callsites.d.ts +14 -0
- package/dist/graph/http-callsites.d.ts.map +1 -0
- package/dist/graph/http-callsites.js +107 -0
- package/dist/graph/http-callsites.js.map +1 -0
- package/dist/graph/incremental.d.ts +122 -0
- package/dist/graph/incremental.d.ts.map +1 -0
- package/dist/graph/incremental.js +448 -0
- package/dist/graph/incremental.js.map +1 -0
- package/dist/graph/language.d.ts +31 -0
- package/dist/graph/language.d.ts.map +1 -0
- package/dist/graph/language.js +146 -0
- package/dist/graph/language.js.map +1 -0
- package/dist/graph/noise-filter.d.ts +46 -0
- package/dist/graph/noise-filter.d.ts.map +1 -0
- package/dist/graph/noise-filter.js +199 -0
- package/dist/graph/noise-filter.js.map +1 -0
- package/dist/graph/python-adapter.d.ts +36 -0
- package/dist/graph/python-adapter.d.ts.map +1 -0
- package/dist/graph/python-adapter.js +402 -0
- package/dist/graph/python-adapter.js.map +1 -0
- package/dist/graph/python-manifest.d.ts +22 -0
- package/dist/graph/python-manifest.d.ts.map +1 -0
- package/dist/graph/python-manifest.js +137 -0
- package/dist/graph/python-manifest.js.map +1 -0
- package/dist/graph/python-stdlib.d.ts +2 -0
- package/dist/graph/python-stdlib.d.ts.map +1 -0
- package/dist/graph/python-stdlib.js +53 -0
- package/dist/graph/python-stdlib.js.map +1 -0
- package/dist/graph/ts-morph-adapter.d.ts +65 -0
- package/dist/graph/ts-morph-adapter.d.ts.map +1 -0
- package/dist/graph/ts-morph-adapter.js +265 -0
- package/dist/graph/ts-morph-adapter.js.map +1 -0
- package/dist/graph/types.d.ts +37 -0
- package/dist/graph/types.d.ts.map +1 -0
- package/dist/graph/types.js +50 -0
- package/dist/graph/types.js.map +1 -0
- package/dist/index.d.ts +45 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +51 -0
- package/dist/index.js.map +1 -0
- package/dist/infra/aws/aws-parse.d.ts +39 -0
- package/dist/infra/aws/aws-parse.d.ts.map +1 -0
- package/dist/infra/aws/aws-parse.js +149 -0
- package/dist/infra/aws/aws-parse.js.map +1 -0
- package/dist/infra/aws/aws.d.ts +6 -0
- package/dist/infra/aws/aws.d.ts.map +1 -0
- package/dist/infra/aws/aws.js +425 -0
- package/dist/infra/aws/aws.js.map +1 -0
- package/dist/infra/azure/azure-parse.d.ts +73 -0
- package/dist/infra/azure/azure-parse.d.ts.map +1 -0
- package/dist/infra/azure/azure-parse.js +178 -0
- package/dist/infra/azure/azure-parse.js.map +1 -0
- package/dist/infra/azure/azure.d.ts +12 -0
- package/dist/infra/azure/azure.d.ts.map +1 -0
- package/dist/infra/azure/azure.js +673 -0
- package/dist/infra/azure/azure.js.map +1 -0
- package/dist/infra/cloudflare/cloudflare.d.ts +50 -0
- package/dist/infra/cloudflare/cloudflare.d.ts.map +1 -0
- package/dist/infra/cloudflare/cloudflare.js +382 -0
- package/dist/infra/cloudflare/cloudflare.js.map +1 -0
- package/dist/infra/cloudflare/wrangler-parse.d.ts +6 -0
- package/dist/infra/cloudflare/wrangler-parse.d.ts.map +1 -0
- package/dist/infra/cloudflare/wrangler-parse.js +278 -0
- package/dist/infra/cloudflare/wrangler-parse.js.map +1 -0
- package/dist/infra/compose/compose-parse.d.ts +24 -0
- package/dist/infra/compose/compose-parse.d.ts.map +1 -0
- package/dist/infra/compose/compose-parse.js +77 -0
- package/dist/infra/compose/compose-parse.js.map +1 -0
- package/dist/infra/compose/compose.d.ts +12 -0
- package/dist/infra/compose/compose.d.ts.map +1 -0
- package/dist/infra/compose/compose.js +201 -0
- package/dist/infra/compose/compose.js.map +1 -0
- package/dist/infra/convex/convex-parse.d.ts +28 -0
- package/dist/infra/convex/convex-parse.d.ts.map +1 -0
- package/dist/infra/convex/convex-parse.js +74 -0
- package/dist/infra/convex/convex-parse.js.map +1 -0
- package/dist/infra/convex/convex.d.ts +18 -0
- package/dist/infra/convex/convex.d.ts.map +1 -0
- package/dist/infra/convex/convex.js +199 -0
- package/dist/infra/convex/convex.js.map +1 -0
- package/dist/infra/digitalocean/digitalocean.d.ts +33 -0
- package/dist/infra/digitalocean/digitalocean.d.ts.map +1 -0
- package/dist/infra/digitalocean/digitalocean.js +204 -0
- package/dist/infra/digitalocean/digitalocean.js.map +1 -0
- package/dist/infra/firebase/firebase.d.ts +43 -0
- package/dist/infra/firebase/firebase.d.ts.map +1 -0
- package/dist/infra/firebase/firebase.js +271 -0
- package/dist/infra/firebase/firebase.js.map +1 -0
- package/dist/infra/fly/fly-parse.d.ts +52 -0
- package/dist/infra/fly/fly-parse.d.ts.map +1 -0
- package/dist/infra/fly/fly-parse.js +114 -0
- package/dist/infra/fly/fly-parse.js.map +1 -0
- package/dist/infra/fly/fly.d.ts +15 -0
- package/dist/infra/fly/fly.d.ts.map +1 -0
- package/dist/infra/fly/fly.js +265 -0
- package/dist/infra/fly/fly.js.map +1 -0
- package/dist/infra/gcp/gcp-parse.d.ts +24 -0
- package/dist/infra/gcp/gcp-parse.d.ts.map +1 -0
- package/dist/infra/gcp/gcp-parse.js +123 -0
- package/dist/infra/gcp/gcp-parse.js.map +1 -0
- package/dist/infra/gcp/gcp.d.ts +10 -0
- package/dist/infra/gcp/gcp.d.ts.map +1 -0
- package/dist/infra/gcp/gcp.js +502 -0
- package/dist/infra/gcp/gcp.js.map +1 -0
- package/dist/infra/heroku/heroku-parse.d.ts +33 -0
- package/dist/infra/heroku/heroku-parse.d.ts.map +1 -0
- package/dist/infra/heroku/heroku-parse.js +63 -0
- package/dist/infra/heroku/heroku-parse.js.map +1 -0
- package/dist/infra/heroku/heroku.d.ts +24 -0
- package/dist/infra/heroku/heroku.d.ts.map +1 -0
- package/dist/infra/heroku/heroku.js +253 -0
- package/dist/infra/heroku/heroku.js.map +1 -0
- package/dist/infra/image-resolve.d.ts +56 -0
- package/dist/infra/image-resolve.d.ts.map +1 -0
- package/dist/infra/image-resolve.js +229 -0
- package/dist/infra/image-resolve.js.map +1 -0
- package/dist/infra/infra-step.d.ts +39 -0
- package/dist/infra/infra-step.d.ts.map +1 -0
- package/dist/infra/infra-step.js +57 -0
- package/dist/infra/infra-step.js.map +1 -0
- package/dist/infra/k8s/index.d.ts +78 -0
- package/dist/infra/k8s/index.d.ts.map +1 -0
- package/dist/infra/k8s/index.js +251 -0
- package/dist/infra/k8s/index.js.map +1 -0
- package/dist/infra/kamal/kamal-parse.d.ts +23 -0
- package/dist/infra/kamal/kamal-parse.d.ts.map +1 -0
- package/dist/infra/kamal/kamal-parse.js +66 -0
- package/dist/infra/kamal/kamal-parse.js.map +1 -0
- package/dist/infra/kamal/kamal.d.ts +17 -0
- package/dist/infra/kamal/kamal.d.ts.map +1 -0
- package/dist/infra/kamal/kamal.js +162 -0
- package/dist/infra/kamal/kamal.js.map +1 -0
- package/dist/infra/netlify/netlify.d.ts +33 -0
- package/dist/infra/netlify/netlify.d.ts.map +1 -0
- package/dist/infra/netlify/netlify.js +247 -0
- package/dist/infra/netlify/netlify.js.map +1 -0
- package/dist/infra/opentofu/opentofu.d.ts +3 -0
- package/dist/infra/opentofu/opentofu.d.ts.map +1 -0
- package/dist/infra/opentofu/opentofu.js +157 -0
- package/dist/infra/opentofu/opentofu.js.map +1 -0
- package/dist/infra/pulumi/pulumi-parse.d.ts +60 -0
- package/dist/infra/pulumi/pulumi-parse.d.ts.map +1 -0
- package/dist/infra/pulumi/pulumi-parse.js +155 -0
- package/dist/infra/pulumi/pulumi-parse.js.map +1 -0
- package/dist/infra/pulumi/pulumi.d.ts +23 -0
- package/dist/infra/pulumi/pulumi.d.ts.map +1 -0
- package/dist/infra/pulumi/pulumi.js +260 -0
- package/dist/infra/pulumi/pulumi.js.map +1 -0
- package/dist/infra/railway/railway-parse.d.ts +54 -0
- package/dist/infra/railway/railway-parse.d.ts.map +1 -0
- package/dist/infra/railway/railway-parse.js +200 -0
- package/dist/infra/railway/railway-parse.js.map +1 -0
- package/dist/infra/railway/railway.d.ts +19 -0
- package/dist/infra/railway/railway.d.ts.map +1 -0
- package/dist/infra/railway/railway.js +397 -0
- package/dist/infra/railway/railway.js.map +1 -0
- package/dist/infra/register.d.ts +2 -0
- package/dist/infra/register.d.ts.map +1 -0
- package/dist/infra/register.js +81 -0
- package/dist/infra/register.js.map +1 -0
- package/dist/infra/registry.d.ts +64 -0
- package/dist/infra/registry.d.ts.map +1 -0
- package/dist/infra/registry.js +205 -0
- package/dist/infra/registry.js.map +1 -0
- package/dist/infra/relevance.d.ts +16 -0
- package/dist/infra/relevance.d.ts.map +1 -0
- package/dist/infra/relevance.js +132 -0
- package/dist/infra/relevance.js.map +1 -0
- package/dist/infra/render/render-parse.d.ts +76 -0
- package/dist/infra/render/render-parse.d.ts.map +1 -0
- package/dist/infra/render/render-parse.js +155 -0
- package/dist/infra/render/render-parse.js.map +1 -0
- package/dist/infra/render/render.d.ts +11 -0
- package/dist/infra/render/render.d.ts.map +1 -0
- package/dist/infra/render/render.js +303 -0
- package/dist/infra/render/render.js.map +1 -0
- package/dist/infra/sst/sst-parse.d.ts +25 -0
- package/dist/infra/sst/sst-parse.d.ts.map +1 -0
- package/dist/infra/sst/sst-parse.js +45 -0
- package/dist/infra/sst/sst-parse.js.map +1 -0
- package/dist/infra/sst/sst.d.ts +19 -0
- package/dist/infra/sst/sst.d.ts.map +1 -0
- package/dist/infra/sst/sst.js +236 -0
- package/dist/infra/sst/sst.js.map +1 -0
- package/dist/infra/supabase/supabase-parse.d.ts +34 -0
- package/dist/infra/supabase/supabase-parse.d.ts.map +1 -0
- package/dist/infra/supabase/supabase-parse.js +113 -0
- package/dist/infra/supabase/supabase-parse.js.map +1 -0
- package/dist/infra/supabase/supabase.d.ts +15 -0
- package/dist/infra/supabase/supabase.d.ts.map +1 -0
- package/dist/infra/supabase/supabase.js +198 -0
- package/dist/infra/supabase/supabase.js.map +1 -0
- package/dist/infra/terraform/hcl-parse.d.ts +34 -0
- package/dist/infra/terraform/hcl-parse.d.ts.map +1 -0
- package/dist/infra/terraform/hcl-parse.js +203 -0
- package/dist/infra/terraform/hcl-parse.js.map +1 -0
- package/dist/infra/terraform/terraform.d.ts +14 -0
- package/dist/infra/terraform/terraform.d.ts.map +1 -0
- package/dist/infra/terraform/terraform.js +264 -0
- package/dist/infra/terraform/terraform.js.map +1 -0
- package/dist/infra/types.d.ts +151 -0
- package/dist/infra/types.d.ts.map +1 -0
- package/dist/infra/types.js +14 -0
- package/dist/infra/types.js.map +1 -0
- package/dist/infra/vercel/vercel-parse.d.ts +70 -0
- package/dist/infra/vercel/vercel-parse.d.ts.map +1 -0
- package/dist/infra/vercel/vercel-parse.js +194 -0
- package/dist/infra/vercel/vercel-parse.js.map +1 -0
- package/dist/infra/vercel/vercel.d.ts +30 -0
- package/dist/infra/vercel/vercel.d.ts.map +1 -0
- package/dist/infra/vercel/vercel.js +523 -0
- package/dist/infra/vercel/vercel.js.map +1 -0
- package/dist/infra/walk.d.ts +36 -0
- package/dist/infra/walk.d.ts.map +1 -0
- package/dist/infra/walk.js +85 -0
- package/dist/infra/walk.js.map +1 -0
- package/dist/safety.d.ts +13 -0
- package/dist/safety.d.ts.map +1 -0
- package/dist/safety.js +67 -0
- package/dist/safety.js.map +1 -0
- package/dist/types.d.ts +47 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +111 -0
- package/dist/types.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +35 -0
- package/dist/version.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
// frontend HTTP call-site extraction (the added-scope prerequisite).
|
|
2
|
+
//
|
|
3
|
+
// Finds the URL string literals a TS/JS frontend uses to call an HTTP API, so the
|
|
4
|
+
// cross-language linker (cross-language.ts) can draw the frontend→backend seam of
|
|
5
|
+
// a unified full-stack diagram. INSTALL-FREE + never-store-source: a static
|
|
6
|
+
// ts-morph parse; only the derived (fileId, url) pairs are kept.
|
|
7
|
+
//
|
|
8
|
+
// Two collection rules, tuned for the real FastAPI-frontend patterns:
|
|
9
|
+
// 1. An `/api…` path or an `http(s)://…/api/…` URL literal ANYWHERE — the
|
|
10
|
+
// dominant shape (a generated OpenAPI SDK — hey-api / openapi-ts — emits
|
|
11
|
+
// `url: '/api/v1/users/'`, and hand-written `fetch('/api/…')` matches too).
|
|
12
|
+
// 2. A `/`-rooted path literal that is the URL ARGUMENT of an HTTP call
|
|
13
|
+
// (`fetch(x)`, `axios.get(x)`, `client.post(x)`, `__request(cfg, {url: x})`)
|
|
14
|
+
// — catches conventions that don't prefix `/api` without matching every
|
|
15
|
+
// stray string.
|
|
16
|
+
// The generated SDK file itself is dropped by the noise filter, so the linker
|
|
17
|
+
// re-attributes these to a surviving sibling module (see cross-language.ts).
|
|
18
|
+
import { Node, SyntaxKind } from 'ts-morph';
|
|
19
|
+
import { addAllSourceFiles, buildExtractionProject, toId } from './ts-morph-adapter.js';
|
|
20
|
+
// HTTP client callee names (bare identifiers) whose first string arg is a URL.
|
|
21
|
+
const HTTP_CALL_IDENTS = new Set(['fetch', '$fetch', 'request', '__request', 'axios', 'ky']);
|
|
22
|
+
// Member-call methods (`x.get(url)`) whose first string arg is a URL.
|
|
23
|
+
const HTTP_CALL_METHODS = new Set(['get', 'post', 'put', 'patch', 'delete', 'request', 'fetch']);
|
|
24
|
+
// Object-literal keys whose string value is a URL (the hey-api `{ url, method }`).
|
|
25
|
+
const URL_KEYS = new Set(['url', 'path', 'endpoint']);
|
|
26
|
+
/** An `/api…` path or an absolute URL that targets an `/api/…` route. */
|
|
27
|
+
function isApiUrl(v) {
|
|
28
|
+
if (/^\/api(\/|$|\?)/i.test(v))
|
|
29
|
+
return true;
|
|
30
|
+
if (/^https?:\/\/[^/]+\/api(\/|$|\?)/i.test(v))
|
|
31
|
+
return true;
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
/** A `/`-rooted, non-relative path literal (a candidate API path; not `./x`, `//cdn`). */
|
|
35
|
+
function isRootedPath(v) {
|
|
36
|
+
return v.startsWith('/') && !v.startsWith('//') && !v.startsWith('/*');
|
|
37
|
+
}
|
|
38
|
+
function calleeIsHttp(call) {
|
|
39
|
+
const callExpr = call.asKind(SyntaxKind.CallExpression);
|
|
40
|
+
if (!callExpr)
|
|
41
|
+
return false;
|
|
42
|
+
const callee = callExpr.getExpression();
|
|
43
|
+
if (callee.getKind() === SyntaxKind.Identifier)
|
|
44
|
+
return HTTP_CALL_IDENTS.has(callee.getText());
|
|
45
|
+
if (callee.getKind() === SyntaxKind.PropertyAccessExpression) {
|
|
46
|
+
const method = (callee.asKind(SyntaxKind.PropertyAccessExpression)).getName();
|
|
47
|
+
return HTTP_CALL_METHODS.has(method);
|
|
48
|
+
}
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
// Is this string literal used AS a URL in an HTTP call? Either the first arg of an
|
|
52
|
+
// HTTP-client call, or a `url`/`path`/`endpoint` property in an object literal.
|
|
53
|
+
function isUrlArgument(lit) {
|
|
54
|
+
const parent = lit.getParent();
|
|
55
|
+
if (!parent)
|
|
56
|
+
return false;
|
|
57
|
+
if (parent.getKind() === SyntaxKind.CallExpression && calleeIsHttp(parent)) {
|
|
58
|
+
const args = (parent.asKind(SyntaxKind.CallExpression)).getArguments();
|
|
59
|
+
return args.length > 0 && args[0] === lit;
|
|
60
|
+
}
|
|
61
|
+
if (parent.getKind() === SyntaxKind.PropertyAssignment) {
|
|
62
|
+
const name = (parent.asKind(SyntaxKind.PropertyAssignment)).getName().replace(/['"]/g, '');
|
|
63
|
+
return URL_KEYS.has(name);
|
|
64
|
+
}
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
function literalUrls(sf) {
|
|
68
|
+
const out = [];
|
|
69
|
+
const lits = [
|
|
70
|
+
...sf.getDescendantsOfKind(SyntaxKind.StringLiteral),
|
|
71
|
+
...sf.getDescendantsOfKind(SyntaxKind.NoSubstitutionTemplateLiteral),
|
|
72
|
+
];
|
|
73
|
+
for (const lit of lits) {
|
|
74
|
+
const v = lit.getLiteralText();
|
|
75
|
+
if (!v)
|
|
76
|
+
continue;
|
|
77
|
+
if (isApiUrl(v) || (isRootedPath(v) && isUrlArgument(lit)))
|
|
78
|
+
out.push(v);
|
|
79
|
+
}
|
|
80
|
+
return out;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Every frontend HTTP call site under `repoDir`. Scans ALL TS/JS source
|
|
84
|
+
* (including generated SDKs — the noise filter drops those from the graph, but
|
|
85
|
+
* they hold the URL literals), so the caller can re-attribute a dropped file to a
|
|
86
|
+
* surviving module. Deterministic (sorted); never throws (a per-file parse error
|
|
87
|
+
* degrades to no calls for that file).
|
|
88
|
+
*/
|
|
89
|
+
export function collectFrontendApiCalls(repoDir) {
|
|
90
|
+
const project = buildExtractionProject(repoDir);
|
|
91
|
+
addAllSourceFiles(project, repoDir);
|
|
92
|
+
const out = [];
|
|
93
|
+
for (const sf of project.getSourceFiles()) {
|
|
94
|
+
const fileId = toId(repoDir, sf.getFilePath());
|
|
95
|
+
let urls = [];
|
|
96
|
+
try {
|
|
97
|
+
urls = literalUrls(sf);
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
urls = [];
|
|
101
|
+
}
|
|
102
|
+
for (const url of urls)
|
|
103
|
+
out.push({ fileId, url });
|
|
104
|
+
}
|
|
105
|
+
return out.sort((a, b) => (a.fileId < b.fileId ? -1 : a.fileId > b.fileId ? 1 : a.url < b.url ? -1 : a.url > b.url ? 1 : 0));
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=http-callsites.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-callsites.js","sourceRoot":"","sources":["../../src/graph/http-callsites.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import type { NormalizedGraph } from './types.js';
|
|
2
|
+
import { type DiffEntry, type FileGraphState, type FileRecord, type SerializedFileGraph } from './file-graph.js';
|
|
3
|
+
export interface PatchMetrics {
|
|
4
|
+
/** How this checkpoint's graph was produced. */
|
|
5
|
+
mode: 'seed-full' | 'seed-cache' | 'seed-blob-cache' | 'patch-refresh' | 'patch-rebuild';
|
|
6
|
+
/** Source files whose content was (re)parsed this checkpoint. */
|
|
7
|
+
parsedFiles: number;
|
|
8
|
+
/** Files whose call edges were re-extracted (the expensive symbol work). */
|
|
9
|
+
callExtracted: number;
|
|
10
|
+
/** Files whose records were carried unchanged from the previous state. */
|
|
11
|
+
carried: number;
|
|
12
|
+
/** Total files in the graph after this checkpoint. */
|
|
13
|
+
filesTotal: number;
|
|
14
|
+
}
|
|
15
|
+
export declare class IncrementalExtractor {
|
|
16
|
+
private project;
|
|
17
|
+
private state;
|
|
18
|
+
/**
|
|
19
|
+
* Stage B — paths whose records were (RE)COMPUTED this boot: exactly
|
|
20
|
+
* the rows worth upserting into the blob parse-cache at boot end. Patch-unit
|
|
21
|
+
* members + full-extract files only — NOT imports-only-refreshed files (their
|
|
22
|
+
* cached record's stale-resolved imports only feed the moved-bindings check
|
|
23
|
+
* on reuse, which re-validates against the live tree anyway; marking them
|
|
24
|
+
* would upsert the whole repo every boot for nothing). Paths that leave the
|
|
25
|
+
* state (deleted files) are dropped — their blobs aren't in the final tree.
|
|
26
|
+
*/
|
|
27
|
+
private dirty;
|
|
28
|
+
/**
|
|
29
|
+
* log the noise-filter policy at most ONCE per engine lifetime (=
|
|
30
|
+
* once per boot). The filter runs on every seed/patch return (so the
|
|
31
|
+
* clustering-bound graph is always clean), but a per-checkpoint log line would
|
|
32
|
+
* spam the merge walk with the same drop every checkpoint. Logging once — at
|
|
33
|
+
* the first checkpoint that drops anything, whether that's a seed or a patch —
|
|
34
|
+
* keeps the house rule (never a silent cap) without the noise.
|
|
35
|
+
*/
|
|
36
|
+
private noiseLogged;
|
|
37
|
+
/**
|
|
38
|
+
* drop tests/generated/build/config/stories/mocks/types from the
|
|
39
|
+
* clustering-bound graph. Deterministic + pure; the carried FileGraphState is
|
|
40
|
+
* left intact (filtering is an OUTPUT concern only — incremental patching, the
|
|
41
|
+
* blob cache, and the Stage-A/B equivalence contract are unaffected).
|
|
42
|
+
*/
|
|
43
|
+
private applyNoiseFilter;
|
|
44
|
+
/** Is there a carried state to patch from? */
|
|
45
|
+
get hasState(): boolean;
|
|
46
|
+
/** The FULL commit sha the carried state corresponds to (diff base). */
|
|
47
|
+
get headSha(): string | null;
|
|
48
|
+
/**
|
|
49
|
+
* Adopt a serialized file graph (the extraction_cache seed) — ZERO parsing.
|
|
50
|
+
* Returns false (and stays unseeded) when the payload isn't usable.
|
|
51
|
+
*/
|
|
52
|
+
adoptCache(serialized: unknown): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Adopt a ground-truth state DIRECTLY (the Stage-B reconciliation heal —
|
|
55
|
+
* container.ts swaps in a fresh full extract's state when drift is found).
|
|
56
|
+
* The caller marks the drifted paths dirty itself (markDirty) so the heal
|
|
57
|
+
* reaches the blob cache; the engine's existing dirty set stays valid (non-
|
|
58
|
+
* drifted records are identical by definition of the diff).
|
|
59
|
+
*/
|
|
60
|
+
adoptState(state: FileGraphState): void;
|
|
61
|
+
/** Paths whose records were (re)computed this boot — the blob-cache upserts. */
|
|
62
|
+
dirtyPaths(): string[];
|
|
63
|
+
/** Forget the dirty set (call after a successful blob-cache upsert). */
|
|
64
|
+
clearDirty(): void;
|
|
65
|
+
/** Mark paths dirty (the reconciliation heal's drifted set). */
|
|
66
|
+
markDirty(paths: readonly string[]): void;
|
|
67
|
+
/** The carried record for a path (blob-cache row material), or null. */
|
|
68
|
+
recordFor(path: string): FileRecord | null;
|
|
69
|
+
/** The carried state (reconciliation comparator input). Do not mutate. */
|
|
70
|
+
stateSnapshot(): FileGraphState;
|
|
71
|
+
/**
|
|
72
|
+
* Full extract at the current working tree (the seed, or the config-
|
|
73
|
+
* invalidator fallback). Same work as the batch adapter — kept for the
|
|
74
|
+
* boot's FIRST checkpoint when no usable cache seed exists.
|
|
75
|
+
*/
|
|
76
|
+
seedFull(repoDir: string, headSha: string): {
|
|
77
|
+
graph: NormalizedGraph;
|
|
78
|
+
metrics: PatchMetrics;
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* Stage B — seed from the content-addressed BLOB PARSE-CACHE: the
|
|
82
|
+
* cold-boot path when no carried graph exists (or its head commit is
|
|
83
|
+
* unreachable in the clone) but per-blob records survive in
|
|
84
|
+
* `file_parse_cache`. `cached` is keyed by repo-relative path and contains
|
|
85
|
+
* ONLY records whose blobSha already matched the current tree — the CALLER
|
|
86
|
+
* does the blob matching (container.ts joins lsTreeBlobs against the cache).
|
|
87
|
+
*
|
|
88
|
+
* CORRECTNESS (the patchTo argument with "diff = cache misses"): a cached
|
|
89
|
+
* record's CALLS are reused only when
|
|
90
|
+
* (a) the content is blob-identical (the caller's join),
|
|
91
|
+
* (b) its freshly-resolved import bindings equal the cached ones (the
|
|
92
|
+
* moved-bindings check below — this also heals a blob that matched at
|
|
93
|
+
* a DIFFERENT path, where relative specifiers resolve elsewhere), and
|
|
94
|
+
* (c) no re-export chain connects it to a miss (the closure).
|
|
95
|
+
* Imports/externals/reexports are re-resolved FRESH for every file (cheap;
|
|
96
|
+
* resolution must reflect THIS tree). Same documented residual as Stage A
|
|
97
|
+
* (deep type-dispatch chains), healed by the periodic reconciliation pass.
|
|
98
|
+
*/
|
|
99
|
+
seedFromBlobCache(repoDir: string, headSha: string, cached: ReadonlyMap<string, FileRecord>): {
|
|
100
|
+
graph: NormalizedGraph;
|
|
101
|
+
metrics: PatchMetrics;
|
|
102
|
+
};
|
|
103
|
+
/**
|
|
104
|
+
* Patch the carried state to the tree currently checked out at `repoDir`
|
|
105
|
+
* (commit `headSha`), given the name-status diff from the carried head to
|
|
106
|
+
* this commit. The caller is responsible for the config-invalidator check
|
|
107
|
+
* (classifyDiff(...).invalidators → call seedFull instead).
|
|
108
|
+
*/
|
|
109
|
+
patchTo(repoDir: string, headSha: string, diff: readonly DiffEntry[]): {
|
|
110
|
+
graph: NormalizedGraph;
|
|
111
|
+
metrics: PatchMetrics;
|
|
112
|
+
};
|
|
113
|
+
/** Serialize the carried state for the extraction_cache fileGraph payload. */
|
|
114
|
+
toCachePayload(blobShaByPath?: ReadonlyMap<string, string>): SerializedFileGraph | null;
|
|
115
|
+
/**
|
|
116
|
+
* The NormalizedGraph view of the carried state (test/diagnostic read).
|
|
117
|
+
* RAW — deliberately NOT noise-filtered: this is the carried-state
|
|
118
|
+
* view the equivalence tests assert against, not a clustering-bound return.
|
|
119
|
+
*/
|
|
120
|
+
graphSnapshot(root: string): NormalizedGraph;
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=incremental.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"incremental.d.ts","sourceRoot":"","sources":["../../src/graph/incremental.ts"],"names":[],"mappings":"AAsCA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAML,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,mBAAmB,EACzB,MAAM,iBAAiB,CAAC;AAWzB,MAAM,WAAW,YAAY;IAC3B,gDAAgD;IAChD,IAAI,EAAE,WAAW,GAAG,YAAY,GAAG,iBAAiB,GAAG,eAAe,GAAG,eAAe,CAAC;IACzF,iEAAiE;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,aAAa,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,KAAK,CAA+B;IAC5C;;;;;;;;OAQG;IACH,OAAO,CAAC,KAAK,CAAqB;IAElC;;;;;;;OAOG;IACH,OAAO,CAAC,WAAW,CAAS;IAE5B;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IASxB,8CAA8C;IAC9C,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,wEAAwE;IACxE,IAAI,OAAO,IAAI,MAAM,GAAG,IAAI,CAE3B;IAED;;;OAGG;IACH,UAAU,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO;IASxC;;;;;;OAMG;IACH,UAAU,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAQvC,gFAAgF;IAChF,UAAU,IAAI,MAAM,EAAE;IAItB,wEAAwE;IACxE,UAAU,IAAI,IAAI;IAIlB,gEAAgE;IAChE,SAAS,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI;IAIzC,wEAAwE;IACxE,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAI1C,0EAA0E;IAC1E,aAAa,IAAI,cAAc;IAK/B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,eAAe,CAAC;QAAC,OAAO,EAAE,YAAY,CAAA;KAAE;IAmC7F;;;;;;;;;;;;;;;;;;OAkBG;IACH,iBAAiB,CACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,GACtC;QAAE,KAAK,EAAE,eAAe,CAAC;QAAC,OAAO,EAAE,YAAY,CAAA;KAAE;IA2FpD;;;;;OAKG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,SAAS,EAAE,GAAG;QAAE,KAAK,EAAE,eAAe,CAAC;QAAC,OAAO,EAAE,YAAY,CAAA;KAAE;IAuJxH,8EAA8E;IAC9E,cAAc,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,mBAAmB,GAAG,IAAI;IAKvF;;;;OAIG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe;CAI7C"}
|