@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 @@
|
|
|
1
|
+
{"version":3,"file":"louvain.js","sourceRoot":"","sources":["../../src/cluster/louvain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ModuleKind } from '../types.js';
|
|
2
|
+
export interface AssignRule {
|
|
3
|
+
pattern: string;
|
|
4
|
+
moduleId: string;
|
|
5
|
+
}
|
|
6
|
+
export interface LabelOverride {
|
|
7
|
+
label?: string;
|
|
8
|
+
summary?: string;
|
|
9
|
+
kind?: ModuleKind;
|
|
10
|
+
}
|
|
11
|
+
export interface OverrideMap {
|
|
12
|
+
drop?: string[];
|
|
13
|
+
assign?: AssignRule[];
|
|
14
|
+
labels?: Record<string, LabelOverride>;
|
|
15
|
+
resolution?: number;
|
|
16
|
+
}
|
|
17
|
+
export declare function compileMatchers(patterns: string[]): (id: string) => boolean;
|
|
18
|
+
export declare function slugify(s: string): string;
|
|
19
|
+
//# sourceMappingURL=overrides.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overrides.d.ts","sourceRoot":"","sources":["../../src/cluster/overrides.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAE1B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;IAEtB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAGvC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAID,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAY3E;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAKzC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// Hand-correction override map — same posture as a manual cluster correction.
|
|
2
|
+
// Unsupervised Louvain is imperfect on a clean repo; a caller-supplied per-repo
|
|
3
|
+
// override lets you fix mis-clusters, drop noise (tests/config), and pin display
|
|
4
|
+
// labels without touching code.
|
|
5
|
+
//
|
|
6
|
+
// This module carries the override VOCABULARY (types) and the pure matcher/slug
|
|
7
|
+
// helpers the clustering pass consumes. Loading a per-repo override document from
|
|
8
|
+
// disk is a host concern (it's host-curated data) — the host loads it and passes
|
|
9
|
+
// the resulting OverrideMap into clusterGraph().
|
|
10
|
+
// Compile glob patterns into a single matcher. Supports `**` (any path span),
|
|
11
|
+
// `*` (within a segment) and literal text — enough for drop/assign rules.
|
|
12
|
+
export function compileMatchers(patterns) {
|
|
13
|
+
if (patterns.length === 0)
|
|
14
|
+
return () => false;
|
|
15
|
+
const regexes = patterns.map((p) => {
|
|
16
|
+
const re = p
|
|
17
|
+
.replace(/[.+^${}()|[\]\\]/g, '\\$&')
|
|
18
|
+
.replace(/\*\*/g, ' ')
|
|
19
|
+
.replace(/\*/g, '[^/]*')
|
|
20
|
+
// eslint-disable-next-line no-control-regex -- intentional NUL sentinel: real globs never contain \x00
|
|
21
|
+
.replace(/ /g, '.*');
|
|
22
|
+
return new RegExp(`^${re}$`);
|
|
23
|
+
});
|
|
24
|
+
return (id) => regexes.some((re) => re.test(id));
|
|
25
|
+
}
|
|
26
|
+
export function slugify(s) {
|
|
27
|
+
return s
|
|
28
|
+
.toLowerCase()
|
|
29
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
30
|
+
.replace(/^-+|-+$/g, '');
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=overrides.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overrides.js","sourceRoot":"","sources":["../../src/cluster/overrides.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,gFAAgF;AAChF,iFAAiF;AACjF,gCAAgC;AAChC,EAAE;AACF,gFAAgF;AAChF,kFAAkF;AAClF,iFAAiF;AACjF,iDAAiD;AA2BjD,8EAA8E;AAC9E,0EAA0E;AAC1E,MAAM,UAAU,eAAe,CAAC,QAAkB;IAChD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC;IAC9C,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACjC,MAAM,EAAE,GAAG,CAAC;aACT,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC;aACpC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;aACrB,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;YACxB,uGAAuG;aACtG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACvB,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,EAAU,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,CAAS;IAC/B,OAAO,CAAC;SACL,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { PackageRole } from '../types.js';
|
|
2
|
+
import type { ClusteredModule } from './louvain.js';
|
|
3
|
+
export interface Subsystem {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
role?: PackageRole;
|
|
8
|
+
}
|
|
9
|
+
export declare const EXTERNAL_SUBSYSTEM_ID = "external";
|
|
10
|
+
export declare const DIR_SUBSYSTEM_PREFIX = "dir:";
|
|
11
|
+
export declare const PKG_SUBSYSTEM_PREFIX = "pkg:";
|
|
12
|
+
export declare const DOMAIN_SUBSYSTEM_PREFIX = "domain:";
|
|
13
|
+
export declare const RESERVED_SUBSYSTEM_PREFIXES: readonly string[];
|
|
14
|
+
export declare function bareSubsystemSlug(id: string): string;
|
|
15
|
+
export declare function dominantTopLevelDir(fileIds: string[]): string | null;
|
|
16
|
+
export declare function humanizeDir(segment: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* Compute the complete subsystem partition for a cluster's modules.
|
|
19
|
+
*
|
|
20
|
+
* DETERMINISTIC + LLM-FREE. Returns a moduleId → Subsystem map covering EVERY
|
|
21
|
+
* module (the "exactly one" partition the validation gate asserts):
|
|
22
|
+
*
|
|
23
|
+
* - External / infra (namespaced) modules → the fixed `external` subsystem.
|
|
24
|
+
*: a module belonging to a workspace PACKAGE (packageId set) → ONE
|
|
25
|
+
* subsystem per package (the monorepo's declared top-level partition), so a
|
|
26
|
+
* shared lib isn't shredded into the app that imports it. Within-package
|
|
27
|
+
* Louvain module clustering is unchanged — many modules, one package box.
|
|
28
|
+
* - Other internal modules (root scope / non-monorepo) → their dominant
|
|
29
|
+
* TOP-LEVEL directory, slugified + humanized.
|
|
30
|
+
* - Root-level internal modules (no top-level dir) → fall back to the module's
|
|
31
|
+
* OWN id-derived grouping (see flat-repo refinement below).
|
|
32
|
+
*
|
|
33
|
+
* FLAT-REPO REFINEMENT (the "Louvain only to refine/split" rule): when
|
|
34
|
+
* the directory heuristic yields a SINGLE non-external subsystem for the whole
|
|
35
|
+
* repo (a flat repo: everything at root, or every module under one top-level
|
|
36
|
+
* dir), a single super-node would be useless. We then refine by giving each
|
|
37
|
+
* internal MODULE its own subsystem keyed by the module's id — and module ids
|
|
38
|
+
* are already the Louvain-derived dominant-segment slugs (stabilized across
|
|
39
|
+
* snapshots by stabilizeModuleIds), so this split is BOTH meaningful AND stable.
|
|
40
|
+
* (Package-assigned modules are out of this refinement — a package is always a
|
|
41
|
+
* real declared boundary, never a flat-repo collapse candidate.)
|
|
42
|
+
*/
|
|
43
|
+
export declare function computeSubsystems(modules: ReadonlyArray<ClusteredModule>): Map<string, Subsystem>;
|
|
44
|
+
export declare function distinctSubsystems(partition: ReadonlyMap<string, Subsystem>): Subsystem[];
|
|
45
|
+
//# sourceMappingURL=subsystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subsystem.d.ts","sourceRoot":"","sources":["../../src/cluster/subsystem.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAQpD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAUD,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAyBhD,eAAO,MAAM,oBAAoB,SAAS,CAAC;AAC3C,eAAO,MAAM,oBAAoB,SAAS,CAAC;AAU3C,eAAO,MAAM,uBAAuB,YAAY,CAAC;AAOjD,eAAO,MAAM,2BAA2B,EAAE,SAAS,MAAM,EAIxD,CAAC;AAOF,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAKpD;AAqBD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAmBpE;AAuCD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAgBnD;AA4BD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,aAAa,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAiDjG;AAKD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,SAAS,EAAE,CAIzF"}
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
// Subsystem partition (, semantic-zoom epic ) — the STABLE,
|
|
2
|
+
// path-derived grouping ONE LEVEL UP from a module.
|
|
3
|
+
//
|
|
4
|
+
// Today's modules (cluster/louvain.ts) are path-derived Louvain clusters whose
|
|
5
|
+
// id is the slugified DOMINANT path segment of their files. A SUBSYSTEM groups
|
|
6
|
+
// modules by their dominant TOP-LEVEL directory segment — "auth", "billing",
|
|
7
|
+
// "ingest" — so the canvas can collapse a whole neighbourhood into one named
|
|
8
|
+
// super-node and re-expand it as the user zooms.
|
|
9
|
+
//
|
|
10
|
+
// The grouping identity was resolved at the design checkpoint to
|
|
11
|
+
// DIRECTORY-PRIMARY + Louvain-refinement (NOT raw Louvain). The decisive
|
|
12
|
+
// constraint: the subsystem id must be STABLE ACROSS SNAPSHOTS — it is read as
|
|
13
|
+
// the time slider scrubs, and a Louvain community INDEX reshuffles run-to-run /
|
|
14
|
+
// snapshot-to-snapshot (degrades the moat; UA never faced this — no time axis).
|
|
15
|
+
// A top-level directory is stable across snapshots, already encodes the human
|
|
16
|
+
// mental model, and NAMES ITSELF (humanized dir → ~zero net-new LLM cost).
|
|
17
|
+
//
|
|
18
|
+
// Subsystems are a COMPLETE, MUTUALLY-EXCLUSIVE partition: every module gets
|
|
19
|
+
// exactly one (the validation gate enforces this once SUBSYSTEM_REQUIRED
|
|
20
|
+
// flips). External / infra-namespaced modules are NOT path-derived (no fileIds),
|
|
21
|
+
// so they get a fixed `external` subsystem rather than a phantom directory.
|
|
22
|
+
//
|
|
23
|
+
// Naming is HEURISTIC-FIRST (humanized directory) — a cheap Flash-Lite pass
|
|
24
|
+
// (enrich/subsystem-names.ts) is the ONLY fallback, used for flat/uninformative
|
|
25
|
+
// repos where the directory name is useless. This module is the DETERMINISTIC
|
|
26
|
+
// half: it always produces a complete partition with heuristic names, with NO
|
|
27
|
+
// LLM dependency, so it runs even in the --no-llm structural pre-pass.
|
|
28
|
+
import { slugify } from './overrides.js';
|
|
29
|
+
// The fixed subsystem every non-path-derived module (external dep / infra node)
|
|
30
|
+
// lands in. These have no source directory of their own, so a directory-derived
|
|
31
|
+
// id would be a phantom; they belong to the "Externals" neighbourhood. Its id is
|
|
32
|
+
// the load-bearing colon-free `external` SENTINEL (grouping-gate's framework
|
|
33
|
+
// discriminator + several consumers key off it) — deliberately NOT `dir:`/`pkg:`
|
|
34
|
+
// namespaced. It only holds namespaced/external modules, so it collides with a
|
|
35
|
+
// module id only in the rare case of an internal module literally slugged
|
|
36
|
+
// `external`; that is out of 's directory-derived scope and left as-is.
|
|
37
|
+
export const EXTERNAL_SUBSYSTEM_ID = 'external';
|
|
38
|
+
const EXTERNAL_SUBSYSTEM = { id: EXTERNAL_SUBSYSTEM_ID, name: 'Externals' };
|
|
39
|
+
// A module id is "namespaced" (external dep `ext:…`, infra `cloudflare:worker:…`)
|
|
40
|
+
// when it carries a ':' — slugify strips ':', so a namespaced id can never collide
|
|
41
|
+
// with a path-derived internal subsystem id. These never get a directory subsystem.
|
|
42
|
+
function isNamespaced(moduleId) {
|
|
43
|
+
return moduleId.includes(':');
|
|
44
|
+
}
|
|
45
|
+
// directory/package-derived subsystem ids are NAMESPACED so a subsystem
|
|
46
|
+
// SUPER-NODE id can NEVER equal a MODULE id. React Flow keys both nodes and
|
|
47
|
+
// container nodes by id; a collision (e.g. a `components`/`e2e` directory box vs a
|
|
48
|
+
// `components`/`e2e` module) corrupts its node store — getNodesBounds under-reports
|
|
49
|
+
// and edges mis-anchor (this is the latent bug 's camera fix had to work
|
|
50
|
+
// around). MODULE ids are either bare path-derived slugs (slugify strips ':', so
|
|
51
|
+
// they NEVER carry one) or already-namespaced infra/external ids (`ext:…`,
|
|
52
|
+
// `cloudflare:…`); a subsystem id under a reserved `dir:`/`pkg:` namespace collides
|
|
53
|
+
// with neither. The id changes; the human display NAME stays the dir/package label.
|
|
54
|
+
//
|
|
55
|
+
// The ':' is ALSO the existing framework-vs-directory discriminator
|
|
56
|
+
// (grouping-gate.ts → isFrameworkSubsystemId): framework adapters namespace their
|
|
57
|
+
// subsystems `<adapter>:<id>` (`nest:auth`, `react-native:root`). So `dir:`/`pkg:`
|
|
58
|
+
// are RESERVED as NON-framework namespaces, and isFrameworkSubsystemId excludes them
|
|
59
|
+
// — keeping the locked framework > package > directory precedence intact.
|
|
60
|
+
export const DIR_SUBSYSTEM_PREFIX = 'dir:';
|
|
61
|
+
export const PKG_SUBSYSTEM_PREFIX = 'pkg:';
|
|
62
|
+
// the LLM domain-pass (cluster/domain-grouping.ts → decisions/subsystem-
|
|
63
|
+
// grouping.ts) mints its OWN group ids and overwrites measured directory subsystems
|
|
64
|
+
// with them when the quality gate trips. Those ids must ALSO be disjoint from module
|
|
65
|
+
// ids (a bare slug), so they carry this prefix. It is RESERVED here (a non-framework
|
|
66
|
+
// namespace) so isFrameworkSubsystemId treats `domain:` as non-framework — a domain
|
|
67
|
+
// group is the LLM's own output over non-framework modules, NOT framework-authoritative,
|
|
68
|
+
// so it must stay re-groupable (pinning it would make the domain-pass refuse to
|
|
69
|
+
// re-group its own modules). domain-grouping.ts imports this constant so there is one
|
|
70
|
+
// definition of the `domain:` namespace.
|
|
71
|
+
export const DOMAIN_SUBSYSTEM_PREFIX = 'domain:';
|
|
72
|
+
// The reserved NON-framework subsystem namespaces. A colon-bearing
|
|
73
|
+
// subsystem id under one of these is directory/package-derived or LLM domain-pass-
|
|
74
|
+
// derived, not a framework adapter id — grouping-gate's discriminator reads this list
|
|
75
|
+
// so it never mistakes a namespaced directory/package/domain box for a framework-owned
|
|
76
|
+
// one (and so never pins a domain-pass id out of its own re-grouping).
|
|
77
|
+
export const RESERVED_SUBSYSTEM_PREFIXES = [
|
|
78
|
+
DIR_SUBSYSTEM_PREFIX,
|
|
79
|
+
PKG_SUBSYSTEM_PREFIX,
|
|
80
|
+
DOMAIN_SUBSYSTEM_PREFIX,
|
|
81
|
+
];
|
|
82
|
+
// The bare slug behind a (possibly namespaced) subsystem id — strips a reserved
|
|
83
|
+
// `dir:`/`pkg:` prefix; a framework (`nest:…`) or the fixed `external` id is
|
|
84
|
+
// returned unchanged. Used ONLY by the subsystem-naming heuristic, which inspects
|
|
85
|
+
// the underlying slug to detect uninformative ids; everywhere else the subsystem
|
|
86
|
+
// id is treated as OPAQUE.
|
|
87
|
+
export function bareSubsystemSlug(id) {
|
|
88
|
+
for (const p of RESERVED_SUBSYSTEM_PREFIXES) {
|
|
89
|
+
if (id.startsWith(p))
|
|
90
|
+
return id.slice(p.length);
|
|
91
|
+
}
|
|
92
|
+
return id;
|
|
93
|
+
}
|
|
94
|
+
// The TOP-LEVEL directory segment of a file id, after stripping an optional
|
|
95
|
+
// leading `src/` (so `src/auth/login.ts` and `auth/login.ts` both → `auth`). A
|
|
96
|
+
// file sitting at the root (or directly under `src/`) has no top-level dir; it
|
|
97
|
+
// returns null and is handled as a root-level module by the caller.
|
|
98
|
+
function topLevelDir(fileId) {
|
|
99
|
+
const rel = fileId.replace(/^src\//, '');
|
|
100
|
+
const slash = rel.indexOf('/');
|
|
101
|
+
return slash > 0 ? rel.slice(0, slash) : null;
|
|
102
|
+
}
|
|
103
|
+
// The dominant top-level directory across a module's files — the most common
|
|
104
|
+
// top-level segment (ties broken alphabetically for determinism). Returns null
|
|
105
|
+
// when EVERY file is root-level (no top-level dir at all), so the caller can
|
|
106
|
+
// route such a module through the flat-repo refinement.
|
|
107
|
+
//
|
|
108
|
+
// Exported so the LLM domain-pass QUALITY GATE (cluster/grouping-gate.ts)
|
|
109
|
+
// measures directory quality with the EXACT same dominant-dir heuristic this
|
|
110
|
+
// deterministic partition uses — one definition of "a module's directory box",
|
|
111
|
+
// not two that could drift.
|
|
112
|
+
export function dominantTopLevelDir(fileIds) {
|
|
113
|
+
const counts = new Map();
|
|
114
|
+
for (const f of fileIds) {
|
|
115
|
+
const d = topLevelDir(f);
|
|
116
|
+
if (d !== null)
|
|
117
|
+
counts.set(d, (counts.get(d) ?? 0) + 1);
|
|
118
|
+
}
|
|
119
|
+
if (counts.size === 0)
|
|
120
|
+
return null;
|
|
121
|
+
let best = null;
|
|
122
|
+
let bestN = -1;
|
|
123
|
+
for (const [seg, n] of counts) {
|
|
124
|
+
// Strictly-greater keeps the first by iteration order; the alpha tiebreak
|
|
125
|
+
// below makes that order-independent (Map iteration is insertion order, and
|
|
126
|
+
// module fileIds order is itself deterministic, but we don't rely on it).
|
|
127
|
+
if (n > bestN || (n === bestN && (best === null || seg < best))) {
|
|
128
|
+
best = seg;
|
|
129
|
+
bestN = n;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return best;
|
|
133
|
+
}
|
|
134
|
+
// Short technical words that should stay UPPER-cased as acronyms (not Title-
|
|
135
|
+
// cased) when they appear as a word in a directory segment — e.g. `payment-api`
|
|
136
|
+
// → "Payment API", not "Payment Api". This is an ALLOW-LIST, deliberately NOT a
|
|
137
|
+
// "≤3 chars ⇒ upper" rule: blanket length-upper-casing produced ugly names for
|
|
138
|
+
// ordinary short dirs (`web→WEB`, `app→APP`, `log→LOG`, `bin→BIN`) on the
|
|
139
|
+
// deterministic path where no LLM pass corrects them ( review nit).
|
|
140
|
+
// Lowercase keys; matched case-insensitively. Extend here, don't widen by length.
|
|
141
|
+
const ACRONYMS = new Set([
|
|
142
|
+
'api', 'db', 'ui', 'ux', 'cli', 'sdk', 'id', 'io', 'os', 'http', 'https',
|
|
143
|
+
'url', 'uri', 'ai', 'ml', 'css', 'html', 'json', 'xml', 'sql', 'jwt',
|
|
144
|
+
'cdn', 'dns', 'tcp', 'udp', 'ssl', 'tls', 'cors', 'rpc', 'grpc', 'graphql',
|
|
145
|
+
'oauth', 'sso', 'iam', 's3', 'gcp', 'aws', 'k8s', 'ci', 'cd', 'qa',
|
|
146
|
+
]);
|
|
147
|
+
// Humanize a directory segment into a display name: split on common separators,
|
|
148
|
+
// title-case each word, and special-case a few conventional dir names that read
|
|
149
|
+
// better expanded (the same dir-name → friendly-name heuristic Understand-
|
|
150
|
+
// Anything uses). Pure presentation — the id is the slug, not this.
|
|
151
|
+
const NAME_OVERRIDES = {
|
|
152
|
+
src: 'Source',
|
|
153
|
+
lib: 'Library',
|
|
154
|
+
libs: 'Libraries',
|
|
155
|
+
api: 'API',
|
|
156
|
+
apis: 'APIs',
|
|
157
|
+
db: 'Database',
|
|
158
|
+
auth: 'Auth',
|
|
159
|
+
ui: 'UI',
|
|
160
|
+
cli: 'CLI',
|
|
161
|
+
ingest: 'Ingestion',
|
|
162
|
+
infra: 'Infrastructure',
|
|
163
|
+
config: 'Configuration',
|
|
164
|
+
utils: 'Utilities',
|
|
165
|
+
util: 'Utilities',
|
|
166
|
+
pkg: 'Packages',
|
|
167
|
+
pkgs: 'Packages',
|
|
168
|
+
cmd: 'Commands',
|
|
169
|
+
};
|
|
170
|
+
export function humanizeDir(segment) {
|
|
171
|
+
const key = segment.toLowerCase();
|
|
172
|
+
if (NAME_OVERRIDES[key])
|
|
173
|
+
return NAME_OVERRIDES[key];
|
|
174
|
+
const words = segment
|
|
175
|
+
.replace(/[_\-.]+/g, ' ')
|
|
176
|
+
// split camelCase / PascalCase boundaries (fooBar → foo Bar)
|
|
177
|
+
.replace(/([a-z0-9])([A-Z])/g, '$1 $2')
|
|
178
|
+
.trim()
|
|
179
|
+
.split(/\s+/)
|
|
180
|
+
.filter(Boolean);
|
|
181
|
+
if (words.length === 0)
|
|
182
|
+
return segment;
|
|
183
|
+
return words
|
|
184
|
+
.map((w) => (ACRONYMS.has(w.toLowerCase())
|
|
185
|
+
? w.toUpperCase() // a known acronym (api, db, ui, …) reads better upper
|
|
186
|
+
: w.charAt(0).toUpperCase() + w.slice(1)))
|
|
187
|
+
.join(' ');
|
|
188
|
+
}
|
|
189
|
+
// Build a Subsystem from a raw directory segment (namespaced slug id + humanized
|
|
190
|
+
// name). the id is `dir:<slug>` so it can never equal a module id (a bare
|
|
191
|
+
// slug); the display name is unchanged.
|
|
192
|
+
function subsystemFromDir(segment) {
|
|
193
|
+
const id = DIR_SUBSYSTEM_PREFIX + (slugify(segment) || 'module');
|
|
194
|
+
return { id, name: humanizeDir(segment) };
|
|
195
|
+
}
|
|
196
|
+
// build a Subsystem from a workspace package — ONE box per package.
|
|
197
|
+
// The id is the (stable, path-derived) package slug; the name humanizes the
|
|
198
|
+
// package name's last segment (`@org/ui` → "UI") so the super-node reads well,
|
|
199
|
+
// falling back to the slug when the package is unnamed; role labels it
|
|
200
|
+
// app/lib/tooling.
|
|
201
|
+
function packageSubsystem(m) {
|
|
202
|
+
const rawId = m.packageId;
|
|
203
|
+
// namespace the bare workspace-package slug as `pkg:<slug>` so it can't
|
|
204
|
+
// equal a module id (a single-module package's entry module shares the slug).
|
|
205
|
+
// Framework adapters (/729) ride packageId with an ALREADY-namespaced
|
|
206
|
+
// `<adapter>:<id>` (e.g. `nest:auth`) — keep those verbatim (never double-prefix).
|
|
207
|
+
const id = rawId.includes(':') ? rawId : PKG_SUBSYSTEM_PREFIX + rawId;
|
|
208
|
+
const fromName = m.packageName ? humanizeDir(m.packageName.split('/').pop() ?? m.packageName) : '';
|
|
209
|
+
const sub = { id, name: fromName || humanizeDir(rawId) };
|
|
210
|
+
if (m.packageRole)
|
|
211
|
+
sub.role = m.packageRole;
|
|
212
|
+
return sub;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Compute the complete subsystem partition for a cluster's modules.
|
|
216
|
+
*
|
|
217
|
+
* DETERMINISTIC + LLM-FREE. Returns a moduleId → Subsystem map covering EVERY
|
|
218
|
+
* module (the "exactly one" partition the validation gate asserts):
|
|
219
|
+
*
|
|
220
|
+
* - External / infra (namespaced) modules → the fixed `external` subsystem.
|
|
221
|
+
*: a module belonging to a workspace PACKAGE (packageId set) → ONE
|
|
222
|
+
* subsystem per package (the monorepo's declared top-level partition), so a
|
|
223
|
+
* shared lib isn't shredded into the app that imports it. Within-package
|
|
224
|
+
* Louvain module clustering is unchanged — many modules, one package box.
|
|
225
|
+
* - Other internal modules (root scope / non-monorepo) → their dominant
|
|
226
|
+
* TOP-LEVEL directory, slugified + humanized.
|
|
227
|
+
* - Root-level internal modules (no top-level dir) → fall back to the module's
|
|
228
|
+
* OWN id-derived grouping (see flat-repo refinement below).
|
|
229
|
+
*
|
|
230
|
+
* FLAT-REPO REFINEMENT (the "Louvain only to refine/split" rule): when
|
|
231
|
+
* the directory heuristic yields a SINGLE non-external subsystem for the whole
|
|
232
|
+
* repo (a flat repo: everything at root, or every module under one top-level
|
|
233
|
+
* dir), a single super-node would be useless. We then refine by giving each
|
|
234
|
+
* internal MODULE its own subsystem keyed by the module's id — and module ids
|
|
235
|
+
* are already the Louvain-derived dominant-segment slugs (stabilized across
|
|
236
|
+
* snapshots by stabilizeModuleIds), so this split is BOTH meaningful AND stable.
|
|
237
|
+
* (Package-assigned modules are out of this refinement — a package is always a
|
|
238
|
+
* real declared boundary, never a flat-repo collapse candidate.)
|
|
239
|
+
*/
|
|
240
|
+
export function computeSubsystems(modules) {
|
|
241
|
+
const out = new Map();
|
|
242
|
+
// Externals + infra → fixed subsystem; workspace-package modules → one box per
|
|
243
|
+
// package; the rest fall through to the directory heuristic below.
|
|
244
|
+
const internal = [];
|
|
245
|
+
for (const m of modules) {
|
|
246
|
+
if (m.kind === 'external' || isNamespaced(m.id)) {
|
|
247
|
+
out.set(m.id, EXTERNAL_SUBSYSTEM);
|
|
248
|
+
}
|
|
249
|
+
else if (m.packageId) {
|
|
250
|
+
out.set(m.id, packageSubsystem(m));
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
internal.push(m);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
// Per-internal-module dominant top-level dir. null ⇒ a root-level module
|
|
257
|
+
// (handled by the refinement below so it still lands in exactly one subsystem).
|
|
258
|
+
const dirOf = new Map();
|
|
259
|
+
// Distinct directory-box slugs, only to COUNT them for the flat decision below
|
|
260
|
+
// (a bijection with the namespaced ids — so the bare slug is fine here).
|
|
261
|
+
const dirSubsystemIds = new Set();
|
|
262
|
+
for (const m of internal) {
|
|
263
|
+
const dir = dominantTopLevelDir(m.fileIds);
|
|
264
|
+
dirOf.set(m.id, dir);
|
|
265
|
+
if (dir !== null)
|
|
266
|
+
dirSubsystemIds.add(slugify(dir) || 'module');
|
|
267
|
+
}
|
|
268
|
+
// FLAT-REPO REFINEMENT trigger: the directory heuristic collapses the whole
|
|
269
|
+
// repo into ≤1 subsystem. Refine by module id (Louvain-derived, stable) so a
|
|
270
|
+
// flat repo still gets a legible multi-subsystem overview instead of one box.
|
|
271
|
+
const flat = dirSubsystemIds.size <= 1;
|
|
272
|
+
for (const m of internal) {
|
|
273
|
+
const dir = dirOf.get(m.id) ?? null;
|
|
274
|
+
if (!flat && dir !== null) {
|
|
275
|
+
out.set(m.id, subsystemFromDir(dir));
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
// Refinement: the module's own id drives its subsystem. The id is already a
|
|
279
|
+
// slug (cluster/louvain.ts), and stable across snapshots — exactly the
|
|
280
|
+
// stability the time slider needs. namespace it `dir:<id>` so the
|
|
281
|
+
// per-module super-node id can't equal the module's OWN node id (which it
|
|
282
|
+
// did by construction before — a guaranteed collision). Humanize the bare id
|
|
283
|
+
// for the display name (unchanged).
|
|
284
|
+
out.set(m.id, { id: DIR_SUBSYSTEM_PREFIX + m.id, name: humanizeDir(m.id) });
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
return out;
|
|
288
|
+
}
|
|
289
|
+
// The set of DISTINCT subsystems in a partition (deduped by id), the input the
|
|
290
|
+
// optional Flash-Lite naming/description fallback ranks over. Deterministic
|
|
291
|
+
// order: by id, so a repeated run prompts identically (prompt-cache friendly).
|
|
292
|
+
export function distinctSubsystems(partition) {
|
|
293
|
+
const byId = new Map();
|
|
294
|
+
for (const s of partition.values())
|
|
295
|
+
if (!byId.has(s.id))
|
|
296
|
+
byId.set(s.id, s);
|
|
297
|
+
return [...byId.values()].sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0));
|
|
298
|
+
}
|
|
299
|
+
//# sourceMappingURL=subsystem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subsystem.js","sourceRoot":"","sources":["../../src/cluster/subsystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { PackageRole } from '../types.js';
|
|
2
|
+
export interface WorkspacePackage {
|
|
3
|
+
/** Repo-relative posix dir, '' for the repo root scope. */
|
|
4
|
+
root: string;
|
|
5
|
+
/** package.json "name", null when unnamed. */
|
|
6
|
+
name: string | null;
|
|
7
|
+
/**
|
|
8
|
+
* Stable slug for module-id prefixes (from the name's last segment or the
|
|
9
|
+
* dir basename, slugified via overrides.ts's slugify). Unique within a
|
|
10
|
+
* layout (collisions dedup deterministically, root-sorted order).
|
|
11
|
+
*/
|
|
12
|
+
slug: string;
|
|
13
|
+
/**
|
|
14
|
+
* Candidate entry files (repo-relative), best-first — package.json
|
|
15
|
+
* main/module/exports['.'] resolved + .js→.ts(x) variants + index.ts(x) /
|
|
16
|
+
* src/index.ts(x) fallbacks. Existence is NOT checked here (the cluster
|
|
17
|
+
* layer checks against the actual file set — it owns the graph).
|
|
18
|
+
*/
|
|
19
|
+
entryFileIds: string[];
|
|
20
|
+
/** Was this boundary DECLARED (workspaces/pnpm/lerna/nx glob) vs inferred from a nested named package.json? */
|
|
21
|
+
declared: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* the package's architectural role (app / lib / tooling), derived
|
|
24
|
+
* deterministically from its dir convention (apps/ vs packages/libs/ vs
|
|
25
|
+
* tools/config), package name (eslint-config / tsconfig / *-config →
|
|
26
|
+
* tooling) and scripts (a runnable start/dev/build/bin → app). The root scope
|
|
27
|
+
* carries a role too, but it's never surfaced (root-scope modules group by
|
|
28
|
+
* directory, not package).
|
|
29
|
+
*/
|
|
30
|
+
role: PackageRole;
|
|
31
|
+
/**
|
|
32
|
+
* repo-relative roots of the workspace SIBLINGS this package depends
|
|
33
|
+
* on — from its package.json deps (all four dependency fields) whose KEY names
|
|
34
|
+
* a workspace sibling. Sorted, deduped, excludes self + the root scope. Empty
|
|
35
|
+
* on the root scope and on leaf packages. The cluster layer (louvain.ts)
|
|
36
|
+
* materializes these as cross-package `calls` edges between the two packages'
|
|
37
|
+
* entry modules. (tsconfig references/path-alias deps are a possible follow-up.)
|
|
38
|
+
*/
|
|
39
|
+
declaredDeps: string[];
|
|
40
|
+
}
|
|
41
|
+
export interface WorkspaceLayout {
|
|
42
|
+
/** Includes the root scope package; >1 ⇒ a real multi-package layout. */
|
|
43
|
+
packages: WorkspacePackage[];
|
|
44
|
+
/** Longest-prefix match over package roots; falls back to the root scope. */
|
|
45
|
+
packageOf(fileId: string): WorkspacePackage;
|
|
46
|
+
/**
|
|
47
|
+
* Named non-root packages, by package.json name — the lookup the cluster
|
|
48
|
+
* layer uses to remap workspace-name bare-specifier externals back onto
|
|
49
|
+
* internal modules. On a (broken) duplicate name, the first package in
|
|
50
|
+
* root-sorted order wins — deterministic, and the loser just keeps its
|
|
51
|
+
* external node (fail-soft).
|
|
52
|
+
*/
|
|
53
|
+
nameToPackage: ReadonlyMap<string, WorkspacePackage>;
|
|
54
|
+
}
|
|
55
|
+
/** Does a repo-relative path name a workspace-layout-defining manifest? */
|
|
56
|
+
export declare function isWorkspaceManifestPath(path: string): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Detect the workspace/package layout of a checked-out repo. fs-reading;
|
|
59
|
+
* NEVER throws — any unreadable/malformed manifest source is skipped, and the
|
|
60
|
+
* worst case is a single-package (root-only) layout, which downstream treats
|
|
61
|
+
* as "no Stage-C behavior" (status quo ante).
|
|
62
|
+
*/
|
|
63
|
+
export declare function detectWorkspaceLayout(rootDir: string): WorkspaceLayout;
|
|
64
|
+
//# sourceMappingURL=workspaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaces.d.ts","sourceRoot":"","sources":["../../src/cluster/workspaces.ts"],"names":[],"mappings":"AAsDA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C,MAAM,WAAW,gBAAgB;IAC/B,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,+GAA+G;IAC/G,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;;;;OAOG;IACH,IAAI,EAAE,WAAW,CAAC;IAClB;;;;;;;OAOG;IACH,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,6EAA6E;IAC7E,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAC5C;;;;;;OAMG;IACH,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CACtD;AAqBD,2EAA2E;AAC3E,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG7D;AAmBD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAyJtE"}
|