@zbigniewsobiecki/squint 1.0.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 +1065 -0
- package/bin/dev.js +5 -0
- package/bin/run.js +5 -0
- package/dist/commands/_shared/db-helper.d.ts +18 -0
- package/dist/commands/_shared/db-helper.d.ts.map +1 -0
- package/dist/commands/_shared/db-helper.js +72 -0
- package/dist/commands/_shared/db-helper.js.map +1 -0
- package/dist/commands/_shared/flags.d.ts +20 -0
- package/dist/commands/_shared/flags.d.ts.map +1 -0
- package/dist/commands/_shared/flags.js +38 -0
- package/dist/commands/_shared/flags.js.map +1 -0
- package/dist/commands/_shared/index.d.ts +6 -0
- package/dist/commands/_shared/index.d.ts.map +1 -0
- package/dist/commands/_shared/index.js +6 -0
- package/dist/commands/_shared/index.js.map +1 -0
- package/dist/commands/_shared/output.d.ts +22 -0
- package/dist/commands/_shared/output.d.ts.map +1 -0
- package/dist/commands/_shared/output.js +36 -0
- package/dist/commands/_shared/output.js.map +1 -0
- package/dist/commands/_shared/source-reader.d.ts +23 -0
- package/dist/commands/_shared/source-reader.d.ts.map +1 -0
- package/dist/commands/_shared/source-reader.js +45 -0
- package/dist/commands/_shared/source-reader.js.map +1 -0
- package/dist/commands/_shared/symbol-resolver.d.ts +35 -0
- package/dist/commands/_shared/symbol-resolver.d.ts.map +1 -0
- package/dist/commands/_shared/symbol-resolver.js +102 -0
- package/dist/commands/_shared/symbol-resolver.js.map +1 -0
- package/dist/commands/browse.d.ts +13 -0
- package/dist/commands/browse.d.ts.map +1 -0
- package/dist/commands/browse.js +106 -0
- package/dist/commands/browse.js.map +1 -0
- package/dist/commands/domains/create.d.ts +15 -0
- package/dist/commands/domains/create.d.ts.map +1 -0
- package/dist/commands/domains/create.js +34 -0
- package/dist/commands/domains/create.js.map +1 -0
- package/dist/commands/domains/delete.d.ts +14 -0
- package/dist/commands/domains/delete.d.ts.map +1 -0
- package/dist/commands/domains/delete.js +41 -0
- package/dist/commands/domains/delete.js.map +1 -0
- package/dist/commands/domains/index.d.ts +2 -0
- package/dist/commands/domains/index.d.ts.map +1 -0
- package/dist/commands/domains/index.js +2 -0
- package/dist/commands/domains/index.js.map +1 -0
- package/dist/commands/domains/list.d.ts +12 -0
- package/dist/commands/domains/list.d.ts.map +1 -0
- package/dist/commands/domains/list.js +67 -0
- package/dist/commands/domains/list.js.map +1 -0
- package/dist/commands/domains/merge.d.ts +14 -0
- package/dist/commands/domains/merge.d.ts.map +1 -0
- package/dist/commands/domains/merge.js +40 -0
- package/dist/commands/domains/merge.js.map +1 -0
- package/dist/commands/domains/rename.d.ts +14 -0
- package/dist/commands/domains/rename.d.ts.map +1 -0
- package/dist/commands/domains/rename.js +33 -0
- package/dist/commands/domains/rename.js.map +1 -0
- package/dist/commands/domains/show.d.ts +14 -0
- package/dist/commands/domains/show.d.ts.map +1 -0
- package/dist/commands/domains/show.js +47 -0
- package/dist/commands/domains/show.js.map +1 -0
- package/dist/commands/domains/sync.d.ts +11 -0
- package/dist/commands/domains/sync.d.ts.map +1 -0
- package/dist/commands/domains/sync.js +33 -0
- package/dist/commands/domains/sync.js.map +1 -0
- package/dist/commands/domains/update.d.ts +14 -0
- package/dist/commands/domains/update.d.ts.map +1 -0
- package/dist/commands/domains/update.js +28 -0
- package/dist/commands/domains/update.js.map +1 -0
- package/dist/commands/features/assign.d.ts +16 -0
- package/dist/commands/features/assign.d.ts.map +1 -0
- package/dist/commands/features/assign.js +51 -0
- package/dist/commands/features/assign.js.map +1 -0
- package/dist/commands/features/create.d.ts +15 -0
- package/dist/commands/features/create.d.ts.map +1 -0
- package/dist/commands/features/create.js +30 -0
- package/dist/commands/features/create.js.map +1 -0
- package/dist/commands/features/delete.d.ts +14 -0
- package/dist/commands/features/delete.d.ts.map +1 -0
- package/dist/commands/features/delete.js +37 -0
- package/dist/commands/features/delete.js.map +1 -0
- package/dist/commands/features/generate.d.ts +34 -0
- package/dist/commands/features/generate.d.ts.map +1 -0
- package/dist/commands/features/generate.js +178 -0
- package/dist/commands/features/generate.js.map +1 -0
- package/dist/commands/features/index.d.ts +2 -0
- package/dist/commands/features/index.d.ts.map +1 -0
- package/dist/commands/features/index.js +2 -0
- package/dist/commands/features/index.js.map +1 -0
- package/dist/commands/features/list.d.ts +11 -0
- package/dist/commands/features/list.d.ts.map +1 -0
- package/dist/commands/features/list.js +45 -0
- package/dist/commands/features/list.js.map +1 -0
- package/dist/commands/features/show.d.ts +15 -0
- package/dist/commands/features/show.d.ts.map +1 -0
- package/dist/commands/features/show.js +61 -0
- package/dist/commands/features/show.js.map +1 -0
- package/dist/commands/features/unassign.d.ts +16 -0
- package/dist/commands/features/unassign.d.ts.map +1 -0
- package/dist/commands/features/unassign.js +55 -0
- package/dist/commands/features/unassign.js.map +1 -0
- package/dist/commands/features/update.d.ts +16 -0
- package/dist/commands/features/update.d.ts.map +1 -0
- package/dist/commands/features/update.js +54 -0
- package/dist/commands/features/update.js.map +1 -0
- package/dist/commands/files/imported-by.d.ts +13 -0
- package/dist/commands/files/imported-by.d.ts.map +1 -0
- package/dist/commands/files/imported-by.js +40 -0
- package/dist/commands/files/imported-by.js.map +1 -0
- package/dist/commands/files/imports.d.ts +14 -0
- package/dist/commands/files/imports.d.ts.map +1 -0
- package/dist/commands/files/imports.js +48 -0
- package/dist/commands/files/imports.js.map +1 -0
- package/dist/commands/files/index.d.ts +2 -0
- package/dist/commands/files/index.d.ts.map +1 -0
- package/dist/commands/files/index.js +2 -0
- package/dist/commands/files/index.js.map +1 -0
- package/dist/commands/files/list.d.ts +11 -0
- package/dist/commands/files/list.d.ts.map +1 -0
- package/dist/commands/files/list.js +35 -0
- package/dist/commands/files/list.js.map +1 -0
- package/dist/commands/files/orphans.d.ts +12 -0
- package/dist/commands/files/orphans.d.ts.map +1 -0
- package/dist/commands/files/orphans.js +43 -0
- package/dist/commands/files/orphans.js.map +1 -0
- package/dist/commands/files/show.d.ts +14 -0
- package/dist/commands/files/show.d.ts.map +1 -0
- package/dist/commands/files/show.js +95 -0
- package/dist/commands/files/show.js.map +1 -0
- package/dist/commands/flows/add-step.d.ts +19 -0
- package/dist/commands/flows/add-step.d.ts.map +1 -0
- package/dist/commands/flows/add-step.js +46 -0
- package/dist/commands/flows/add-step.js.map +1 -0
- package/dist/commands/flows/create.d.ts +17 -0
- package/dist/commands/flows/create.d.ts.map +1 -0
- package/dist/commands/flows/create.js +39 -0
- package/dist/commands/flows/create.js.map +1 -0
- package/dist/commands/flows/delete.d.ts +14 -0
- package/dist/commands/flows/delete.d.ts.map +1 -0
- package/dist/commands/flows/delete.js +37 -0
- package/dist/commands/flows/delete.js.map +1 -0
- package/dist/commands/flows/generate.d.ts +50 -0
- package/dist/commands/flows/generate.d.ts.map +1 -0
- package/dist/commands/flows/generate.js +438 -0
- package/dist/commands/flows/generate.js.map +1 -0
- package/dist/commands/flows/index.d.ts +2 -0
- package/dist/commands/flows/index.d.ts.map +1 -0
- package/dist/commands/flows/index.js +2 -0
- package/dist/commands/flows/index.js.map +1 -0
- package/dist/commands/flows/list.d.ts +12 -0
- package/dist/commands/flows/list.d.ts.map +1 -0
- package/dist/commands/flows/list.js +98 -0
- package/dist/commands/flows/list.js.map +1 -0
- package/dist/commands/flows/remove-step.d.ts +18 -0
- package/dist/commands/flows/remove-step.d.ts.map +1 -0
- package/dist/commands/flows/remove-step.js +41 -0
- package/dist/commands/flows/remove-step.js.map +1 -0
- package/dist/commands/flows/show.d.ts +17 -0
- package/dist/commands/flows/show.d.ts.map +1 -0
- package/dist/commands/flows/show.js +136 -0
- package/dist/commands/flows/show.js.map +1 -0
- package/dist/commands/flows/trace.d.ts +22 -0
- package/dist/commands/flows/trace.d.ts.map +1 -0
- package/dist/commands/flows/trace.js +217 -0
- package/dist/commands/flows/trace.js.map +1 -0
- package/dist/commands/flows/update.d.ts +17 -0
- package/dist/commands/flows/update.d.ts.map +1 -0
- package/dist/commands/flows/update.js +60 -0
- package/dist/commands/flows/update.js.map +1 -0
- package/dist/commands/flows/verify.d.ts +21 -0
- package/dist/commands/flows/verify.d.ts.map +1 -0
- package/dist/commands/flows/verify.js +123 -0
- package/dist/commands/flows/verify.js.map +1 -0
- package/dist/commands/gaps.d.ts +14 -0
- package/dist/commands/gaps.d.ts.map +1 -0
- package/dist/commands/gaps.js +184 -0
- package/dist/commands/gaps.js.map +1 -0
- package/dist/commands/hierarchy/index.d.ts +20 -0
- package/dist/commands/hierarchy/index.d.ts.map +1 -0
- package/dist/commands/hierarchy/index.js +344 -0
- package/dist/commands/hierarchy/index.js.map +1 -0
- package/dist/commands/ingest.d.ts +23 -0
- package/dist/commands/ingest.d.ts.map +1 -0
- package/dist/commands/ingest.js +249 -0
- package/dist/commands/ingest.js.map +1 -0
- package/dist/commands/interactions/create.d.ts +16 -0
- package/dist/commands/interactions/create.d.ts.map +1 -0
- package/dist/commands/interactions/create.js +58 -0
- package/dist/commands/interactions/create.js.map +1 -0
- package/dist/commands/interactions/delete.d.ts +16 -0
- package/dist/commands/interactions/delete.d.ts.map +1 -0
- package/dist/commands/interactions/delete.js +28 -0
- package/dist/commands/interactions/delete.js.map +1 -0
- package/dist/commands/interactions/generate.d.ts +62 -0
- package/dist/commands/interactions/generate.d.ts.map +1 -0
- package/dist/commands/interactions/generate.js +870 -0
- package/dist/commands/interactions/generate.js.map +1 -0
- package/dist/commands/interactions/index.d.ts +2 -0
- package/dist/commands/interactions/index.d.ts.map +1 -0
- package/dist/commands/interactions/index.js +2 -0
- package/dist/commands/interactions/index.js.map +1 -0
- package/dist/commands/interactions/list.d.ts +15 -0
- package/dist/commands/interactions/list.d.ts.map +1 -0
- package/dist/commands/interactions/list.js +127 -0
- package/dist/commands/interactions/list.js.map +1 -0
- package/dist/commands/interactions/show.d.ts +17 -0
- package/dist/commands/interactions/show.d.ts.map +1 -0
- package/dist/commands/interactions/show.js +80 -0
- package/dist/commands/interactions/show.js.map +1 -0
- package/dist/commands/interactions/update.d.ts +20 -0
- package/dist/commands/interactions/update.d.ts.map +1 -0
- package/dist/commands/interactions/update.js +57 -0
- package/dist/commands/interactions/update.js.map +1 -0
- package/dist/commands/interactions/validate.d.ts +12 -0
- package/dist/commands/interactions/validate.d.ts.map +1 -0
- package/dist/commands/interactions/validate.js +94 -0
- package/dist/commands/interactions/validate.js.map +1 -0
- package/dist/commands/interactions/verify.d.ts +18 -0
- package/dist/commands/interactions/verify.d.ts.map +1 -0
- package/dist/commands/interactions/verify.js +127 -0
- package/dist/commands/interactions/verify.js.map +1 -0
- package/dist/commands/llm/_shared/base-llm-command.d.ts +44 -0
- package/dist/commands/llm/_shared/base-llm-command.d.ts.map +1 -0
- package/dist/commands/llm/_shared/base-llm-command.js +73 -0
- package/dist/commands/llm/_shared/base-llm-command.js.map +1 -0
- package/dist/commands/llm/_shared/coverage.d.ts +61 -0
- package/dist/commands/llm/_shared/coverage.d.ts.map +1 -0
- package/dist/commands/llm/_shared/coverage.js +161 -0
- package/dist/commands/llm/_shared/coverage.js.map +1 -0
- package/dist/commands/llm/_shared/csv-utils.d.ts +65 -0
- package/dist/commands/llm/_shared/csv-utils.d.ts.map +1 -0
- package/dist/commands/llm/_shared/csv-utils.js +231 -0
- package/dist/commands/llm/_shared/csv-utils.js.map +1 -0
- package/dist/commands/llm/_shared/csv.d.ts +44 -0
- package/dist/commands/llm/_shared/csv.d.ts.map +1 -0
- package/dist/commands/llm/_shared/csv.js +76 -0
- package/dist/commands/llm/_shared/csv.js.map +1 -0
- package/dist/commands/llm/_shared/entity-utils.d.ts +11 -0
- package/dist/commands/llm/_shared/entity-utils.d.ts.map +1 -0
- package/dist/commands/llm/_shared/entity-utils.js +87 -0
- package/dist/commands/llm/_shared/entity-utils.js.map +1 -0
- package/dist/commands/llm/_shared/flow-csv.d.ts +74 -0
- package/dist/commands/llm/_shared/flow-csv.d.ts.map +1 -0
- package/dist/commands/llm/_shared/flow-csv.js +198 -0
- package/dist/commands/llm/_shared/flow-csv.js.map +1 -0
- package/dist/commands/llm/_shared/flow-prompts.d.ts +61 -0
- package/dist/commands/llm/_shared/flow-prompts.d.ts.map +1 -0
- package/dist/commands/llm/_shared/flow-prompts.js +281 -0
- package/dist/commands/llm/_shared/flow-prompts.js.map +1 -0
- package/dist/commands/llm/_shared/flow-validation.d.ts +69 -0
- package/dist/commands/llm/_shared/flow-validation.d.ts.map +1 -0
- package/dist/commands/llm/_shared/flow-validation.js +176 -0
- package/dist/commands/llm/_shared/flow-validation.js.map +1 -0
- package/dist/commands/llm/_shared/llm-utils.d.ts +88 -0
- package/dist/commands/llm/_shared/llm-utils.d.ts.map +1 -0
- package/dist/commands/llm/_shared/llm-utils.js +256 -0
- package/dist/commands/llm/_shared/llm-utils.js.map +1 -0
- package/dist/commands/llm/_shared/module-csv.d.ts +76 -0
- package/dist/commands/llm/_shared/module-csv.d.ts.map +1 -0
- package/dist/commands/llm/_shared/module-csv.js +196 -0
- package/dist/commands/llm/_shared/module-csv.js.map +1 -0
- package/dist/commands/llm/_shared/module-prompts.d.ts +107 -0
- package/dist/commands/llm/_shared/module-prompts.d.ts.map +1 -0
- package/dist/commands/llm/_shared/module-prompts.js +395 -0
- package/dist/commands/llm/_shared/module-prompts.js.map +1 -0
- package/dist/commands/llm/_shared/process-utils.d.ts +52 -0
- package/dist/commands/llm/_shared/process-utils.d.ts.map +1 -0
- package/dist/commands/llm/_shared/process-utils.js +214 -0
- package/dist/commands/llm/_shared/process-utils.js.map +1 -0
- package/dist/commands/llm/_shared/prompts.d.ts +132 -0
- package/dist/commands/llm/_shared/prompts.d.ts.map +1 -0
- package/dist/commands/llm/_shared/prompts.js +391 -0
- package/dist/commands/llm/_shared/prompts.js.map +1 -0
- package/dist/commands/llm/_shared/pure-check.d.ts +10 -0
- package/dist/commands/llm/_shared/pure-check.d.ts.map +1 -0
- package/dist/commands/llm/_shared/pure-check.js +449 -0
- package/dist/commands/llm/_shared/pure-check.js.map +1 -0
- package/dist/commands/llm/_shared/verify/content-verifier.d.ts +40 -0
- package/dist/commands/llm/_shared/verify/content-verifier.d.ts.map +1 -0
- package/dist/commands/llm/_shared/verify/content-verifier.js +247 -0
- package/dist/commands/llm/_shared/verify/content-verifier.js.map +1 -0
- package/dist/commands/llm/_shared/verify/coverage-checker.d.ts +34 -0
- package/dist/commands/llm/_shared/verify/coverage-checker.d.ts.map +1 -0
- package/dist/commands/llm/_shared/verify/coverage-checker.js +1096 -0
- package/dist/commands/llm/_shared/verify/coverage-checker.js.map +1 -0
- package/dist/commands/llm/_shared/verify/verify-prompts.d.ts +30 -0
- package/dist/commands/llm/_shared/verify/verify-prompts.d.ts.map +1 -0
- package/dist/commands/llm/_shared/verify/verify-prompts.js +118 -0
- package/dist/commands/llm/_shared/verify/verify-prompts.js.map +1 -0
- package/dist/commands/llm/_shared/verify/verify-types.d.ts +47 -0
- package/dist/commands/llm/_shared/verify/verify-types.d.ts.map +1 -0
- package/dist/commands/llm/_shared/verify/verify-types.js +2 -0
- package/dist/commands/llm/_shared/verify/verify-types.js.map +1 -0
- package/dist/commands/llm/annotate.d.ts +7 -0
- package/dist/commands/llm/annotate.d.ts.map +1 -0
- package/dist/commands/llm/annotate.js +11 -0
- package/dist/commands/llm/annotate.js.map +1 -0
- package/dist/commands/llm/features/feature-grouper.d.ts +31 -0
- package/dist/commands/llm/features/feature-grouper.d.ts.map +1 -0
- package/dist/commands/llm/features/feature-grouper.js +223 -0
- package/dist/commands/llm/features/feature-grouper.js.map +1 -0
- package/dist/commands/llm/features/index.d.ts +6 -0
- package/dist/commands/llm/features/index.d.ts.map +1 -0
- package/dist/commands/llm/features/index.js +6 -0
- package/dist/commands/llm/features/index.js.map +1 -0
- package/dist/commands/llm/features/types.d.ts +10 -0
- package/dist/commands/llm/features/types.d.ts.map +1 -0
- package/dist/commands/llm/features/types.js +5 -0
- package/dist/commands/llm/features/types.js.map +1 -0
- package/dist/commands/llm/features.d.ts +7 -0
- package/dist/commands/llm/features.d.ts.map +1 -0
- package/dist/commands/llm/features.js +11 -0
- package/dist/commands/llm/features.js.map +1 -0
- package/dist/commands/llm/flows/atomic-flow-builder.d.ts +51 -0
- package/dist/commands/llm/flows/atomic-flow-builder.d.ts.map +1 -0
- package/dist/commands/llm/flows/atomic-flow-builder.js +247 -0
- package/dist/commands/llm/flows/atomic-flow-builder.js.map +1 -0
- package/dist/commands/llm/flows/dedup.d.ts +18 -0
- package/dist/commands/llm/flows/dedup.d.ts.map +1 -0
- package/dist/commands/llm/flows/dedup.js +76 -0
- package/dist/commands/llm/flows/dedup.js.map +1 -0
- package/dist/commands/llm/flows/entry-point-detector.d.ts +41 -0
- package/dist/commands/llm/flows/entry-point-detector.d.ts.map +1 -0
- package/dist/commands/llm/flows/entry-point-detector.js +388 -0
- package/dist/commands/llm/flows/entry-point-detector.js.map +1 -0
- package/dist/commands/llm/flows/flow-enhancer.d.ts +21 -0
- package/dist/commands/llm/flows/flow-enhancer.d.ts.map +1 -0
- package/dist/commands/llm/flows/flow-enhancer.js +166 -0
- package/dist/commands/llm/flows/flow-enhancer.js.map +1 -0
- package/dist/commands/llm/flows/flow-tracer.d.ts +50 -0
- package/dist/commands/llm/flows/flow-tracer.d.ts.map +1 -0
- package/dist/commands/llm/flows/flow-tracer.js +271 -0
- package/dist/commands/llm/flows/flow-tracer.js.map +1 -0
- package/dist/commands/llm/flows/flow-validator.d.ts +31 -0
- package/dist/commands/llm/flows/flow-validator.d.ts.map +1 -0
- package/dist/commands/llm/flows/flow-validator.js +262 -0
- package/dist/commands/llm/flows/flow-validator.js.map +1 -0
- package/dist/commands/llm/flows/gap-flow-generator.d.ts +13 -0
- package/dist/commands/llm/flows/gap-flow-generator.d.ts.map +1 -0
- package/dist/commands/llm/flows/gap-flow-generator.js +48 -0
- package/dist/commands/llm/flows/gap-flow-generator.js.map +1 -0
- package/dist/commands/llm/flows/index.d.ts +12 -0
- package/dist/commands/llm/flows/index.d.ts.map +1 -0
- package/dist/commands/llm/flows/index.js +12 -0
- package/dist/commands/llm/flows/index.js.map +1 -0
- package/dist/commands/llm/flows/types.d.ts +87 -0
- package/dist/commands/llm/flows/types.d.ts.map +1 -0
- package/dist/commands/llm/flows/types.js +5 -0
- package/dist/commands/llm/flows/types.js.map +1 -0
- package/dist/commands/llm/flows.d.ts +7 -0
- package/dist/commands/llm/flows.d.ts.map +1 -0
- package/dist/commands/llm/flows.js +11 -0
- package/dist/commands/llm/flows.js.map +1 -0
- package/dist/commands/llm/interactions.d.ts +7 -0
- package/dist/commands/llm/interactions.d.ts.map +1 -0
- package/dist/commands/llm/interactions.js +11 -0
- package/dist/commands/llm/interactions.js.map +1 -0
- package/dist/commands/llm/modules.d.ts +7 -0
- package/dist/commands/llm/modules.d.ts.map +1 -0
- package/dist/commands/llm/modules.js +11 -0
- package/dist/commands/llm/modules.js.map +1 -0
- package/dist/commands/llm/relationships.d.ts +7 -0
- package/dist/commands/llm/relationships.d.ts.map +1 -0
- package/dist/commands/llm/relationships.js +11 -0
- package/dist/commands/llm/relationships.js.map +1 -0
- package/dist/commands/modules/assign.d.ts +14 -0
- package/dist/commands/modules/assign.d.ts.map +1 -0
- package/dist/commands/modules/assign.js +54 -0
- package/dist/commands/modules/assign.js.map +1 -0
- package/dist/commands/modules/create.d.ts +16 -0
- package/dist/commands/modules/create.d.ts.map +1 -0
- package/dist/commands/modules/create.js +37 -0
- package/dist/commands/modules/create.js.map +1 -0
- package/dist/commands/modules/delete.d.ts +14 -0
- package/dist/commands/modules/delete.d.ts.map +1 -0
- package/dist/commands/modules/delete.js +54 -0
- package/dist/commands/modules/delete.js.map +1 -0
- package/dist/commands/modules/generate.d.ts +84 -0
- package/dist/commands/modules/generate.d.ts.map +1 -0
- package/dist/commands/modules/generate.js +1234 -0
- package/dist/commands/modules/generate.js.map +1 -0
- package/dist/commands/modules/index.d.ts +2 -0
- package/dist/commands/modules/index.d.ts.map +1 -0
- package/dist/commands/modules/index.js +2 -0
- package/dist/commands/modules/index.js.map +1 -0
- package/dist/commands/modules/list.d.ts +13 -0
- package/dist/commands/modules/list.d.ts.map +1 -0
- package/dist/commands/modules/list.js +92 -0
- package/dist/commands/modules/list.js.map +1 -0
- package/dist/commands/modules/prune.d.ts +10 -0
- package/dist/commands/modules/prune.d.ts.map +1 -0
- package/dist/commands/modules/prune.js +23 -0
- package/dist/commands/modules/prune.js.map +1 -0
- package/dist/commands/modules/show.d.ts +15 -0
- package/dist/commands/modules/show.d.ts.map +1 -0
- package/dist/commands/modules/show.js +95 -0
- package/dist/commands/modules/show.js.map +1 -0
- package/dist/commands/modules/unassign.d.ts +13 -0
- package/dist/commands/modules/unassign.d.ts.map +1 -0
- package/dist/commands/modules/unassign.js +49 -0
- package/dist/commands/modules/unassign.js.map +1 -0
- package/dist/commands/modules/update.d.ts +15 -0
- package/dist/commands/modules/update.d.ts.map +1 -0
- package/dist/commands/modules/update.js +50 -0
- package/dist/commands/modules/update.js.map +1 -0
- package/dist/commands/modules/verify.d.ts +18 -0
- package/dist/commands/modules/verify.d.ts.map +1 -0
- package/dist/commands/modules/verify.js +114 -0
- package/dist/commands/modules/verify.js.map +1 -0
- package/dist/commands/overview.d.ts +12 -0
- package/dist/commands/overview.d.ts.map +1 -0
- package/dist/commands/overview.js +219 -0
- package/dist/commands/overview.js.map +1 -0
- package/dist/commands/parse.d.ts +30 -0
- package/dist/commands/parse.d.ts.map +1 -0
- package/dist/commands/parse.js +211 -0
- package/dist/commands/parse.js.map +1 -0
- package/dist/commands/process-groups/index.d.ts +2 -0
- package/dist/commands/process-groups/index.d.ts.map +1 -0
- package/dist/commands/process-groups/index.js +2 -0
- package/dist/commands/process-groups/index.js.map +1 -0
- package/dist/commands/process-groups/list.d.ts +11 -0
- package/dist/commands/process-groups/list.d.ts.map +1 -0
- package/dist/commands/process-groups/list.js +98 -0
- package/dist/commands/process-groups/list.js.map +1 -0
- package/dist/commands/relationships/annotate.d.ts +27 -0
- package/dist/commands/relationships/annotate.d.ts.map +1 -0
- package/dist/commands/relationships/annotate.js +453 -0
- package/dist/commands/relationships/annotate.js.map +1 -0
- package/dist/commands/relationships/index.d.ts +2 -0
- package/dist/commands/relationships/index.d.ts.map +1 -0
- package/dist/commands/relationships/index.js +2 -0
- package/dist/commands/relationships/index.js.map +1 -0
- package/dist/commands/relationships/list.d.ts +18 -0
- package/dist/commands/relationships/list.d.ts.map +1 -0
- package/dist/commands/relationships/list.js +147 -0
- package/dist/commands/relationships/list.js.map +1 -0
- package/dist/commands/relationships/next.d.ts +17 -0
- package/dist/commands/relationships/next.d.ts.map +1 -0
- package/dist/commands/relationships/next.js +178 -0
- package/dist/commands/relationships/next.js.map +1 -0
- package/dist/commands/relationships/set.d.ts +19 -0
- package/dist/commands/relationships/set.d.ts.map +1 -0
- package/dist/commands/relationships/set.js +65 -0
- package/dist/commands/relationships/set.js.map +1 -0
- package/dist/commands/relationships/show.d.ts +13 -0
- package/dist/commands/relationships/show.d.ts.map +1 -0
- package/dist/commands/relationships/show.js +59 -0
- package/dist/commands/relationships/show.js.map +1 -0
- package/dist/commands/relationships/unset.d.ts +16 -0
- package/dist/commands/relationships/unset.d.ts.map +1 -0
- package/dist/commands/relationships/unset.js +62 -0
- package/dist/commands/relationships/unset.js.map +1 -0
- package/dist/commands/relationships/verify.d.ts +24 -0
- package/dist/commands/relationships/verify.d.ts.map +1 -0
- package/dist/commands/relationships/verify.js +328 -0
- package/dist/commands/relationships/verify.js.map +1 -0
- package/dist/commands/stats.d.ts +11 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +207 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/symbols/annotate.d.ts +32 -0
- package/dist/commands/symbols/annotate.d.ts.map +1 -0
- package/dist/commands/symbols/annotate.js +862 -0
- package/dist/commands/symbols/annotate.js.map +1 -0
- package/dist/commands/symbols/deps.d.ts +18 -0
- package/dist/commands/symbols/deps.d.ts.map +1 -0
- package/dist/commands/symbols/deps.js +104 -0
- package/dist/commands/symbols/deps.js.map +1 -0
- package/dist/commands/symbols/index.d.ts +2 -0
- package/dist/commands/symbols/index.d.ts.map +1 -0
- package/dist/commands/symbols/index.js +2 -0
- package/dist/commands/symbols/index.js.map +1 -0
- package/dist/commands/symbols/list.d.ts +17 -0
- package/dist/commands/symbols/list.d.ts.map +1 -0
- package/dist/commands/symbols/list.js +136 -0
- package/dist/commands/symbols/list.js.map +1 -0
- package/dist/commands/symbols/next.d.ts +15 -0
- package/dist/commands/symbols/next.d.ts.map +1 -0
- package/dist/commands/symbols/next.js +147 -0
- package/dist/commands/symbols/next.js.map +1 -0
- package/dist/commands/symbols/prereqs.d.ts +18 -0
- package/dist/commands/symbols/prereqs.d.ts.map +1 -0
- package/dist/commands/symbols/prereqs.js +107 -0
- package/dist/commands/symbols/prereqs.js.map +1 -0
- package/dist/commands/symbols/ready.d.ts +17 -0
- package/dist/commands/symbols/ready.d.ts.map +1 -0
- package/dist/commands/symbols/ready.js +126 -0
- package/dist/commands/symbols/ready.js.map +1 -0
- package/dist/commands/symbols/set.d.ts +27 -0
- package/dist/commands/symbols/set.d.ts.map +1 -0
- package/dist/commands/symbols/set.js +241 -0
- package/dist/commands/symbols/set.js.map +1 -0
- package/dist/commands/symbols/show.d.ts +19 -0
- package/dist/commands/symbols/show.d.ts.map +1 -0
- package/dist/commands/symbols/show.js +182 -0
- package/dist/commands/symbols/show.js.map +1 -0
- package/dist/commands/symbols/understood.d.ts +15 -0
- package/dist/commands/symbols/understood.d.ts.map +1 -0
- package/dist/commands/symbols/understood.js +101 -0
- package/dist/commands/symbols/understood.js.map +1 -0
- package/dist/commands/symbols/unset.d.ts +16 -0
- package/dist/commands/symbols/unset.d.ts.map +1 -0
- package/dist/commands/symbols/unset.js +48 -0
- package/dist/commands/symbols/unset.js.map +1 -0
- package/dist/commands/symbols/verify.d.ts +25 -0
- package/dist/commands/symbols/verify.d.ts.map +1 -0
- package/dist/commands/symbols/verify.js +360 -0
- package/dist/commands/symbols/verify.js.map +1 -0
- package/dist/db/connection.d.ts +14 -0
- package/dist/db/connection.d.ts.map +1 -0
- package/dist/db/connection.js +37 -0
- package/dist/db/connection.js.map +1 -0
- package/dist/db/database-facade.d.ts +125 -0
- package/dist/db/database-facade.d.ts.map +1 -0
- package/dist/db/database-facade.js +347 -0
- package/dist/db/database-facade.js.map +1 -0
- package/dist/db/database.d.ts +9 -0
- package/dist/db/database.d.ts.map +1 -0
- package/dist/db/database.js +11 -0
- package/dist/db/database.js.map +1 -0
- package/dist/db/index.d.ts +7 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +11 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/repositories/_shared/call-graph-query.d.ts +10 -0
- package/dist/db/repositories/_shared/call-graph-query.d.ts.map +1 -0
- package/dist/db/repositories/_shared/call-graph-query.js +59 -0
- package/dist/db/repositories/_shared/call-graph-query.js.map +1 -0
- package/dist/db/repositories/call-graph-service.d.ts +28 -0
- package/dist/db/repositories/call-graph-service.d.ts.map +1 -0
- package/dist/db/repositories/call-graph-service.js +223 -0
- package/dist/db/repositories/call-graph-service.js.map +1 -0
- package/dist/db/repositories/definition-repository.d.ts +99 -0
- package/dist/db/repositories/definition-repository.d.ts.map +1 -0
- package/dist/db/repositories/definition-repository.js +317 -0
- package/dist/db/repositories/definition-repository.js.map +1 -0
- package/dist/db/repositories/dependency-repository.d.ts +78 -0
- package/dist/db/repositories/dependency-repository.d.ts.map +1 -0
- package/dist/db/repositories/dependency-repository.js +446 -0
- package/dist/db/repositories/dependency-repository.js.map +1 -0
- package/dist/db/repositories/domain-repository.d.ts +97 -0
- package/dist/db/repositories/domain-repository.d.ts.map +1 -0
- package/dist/db/repositories/domain-repository.js +261 -0
- package/dist/db/repositories/domain-repository.js.map +1 -0
- package/dist/db/repositories/feature-repository.d.ts +64 -0
- package/dist/db/repositories/feature-repository.d.ts.map +1 -0
- package/dist/db/repositories/feature-repository.js +189 -0
- package/dist/db/repositories/feature-repository.js.map +1 -0
- package/dist/db/repositories/file-repository.d.ts +67 -0
- package/dist/db/repositories/file-repository.d.ts.map +1 -0
- package/dist/db/repositories/file-repository.js +179 -0
- package/dist/db/repositories/file-repository.js.map +1 -0
- package/dist/db/repositories/flow-repository.d.ts +172 -0
- package/dist/db/repositories/flow-repository.d.ts.map +1 -0
- package/dist/db/repositories/flow-repository.js +599 -0
- package/dist/db/repositories/flow-repository.js.map +1 -0
- package/dist/db/repositories/graph-repository.d.ts +93 -0
- package/dist/db/repositories/graph-repository.d.ts.map +1 -0
- package/dist/db/repositories/graph-repository.js +413 -0
- package/dist/db/repositories/graph-repository.js.map +1 -0
- package/dist/db/repositories/index.d.ts +20 -0
- package/dist/db/repositories/index.d.ts.map +1 -0
- package/dist/db/repositories/index.js +15 -0
- package/dist/db/repositories/index.js.map +1 -0
- package/dist/db/repositories/interaction-analysis.d.ts +78 -0
- package/dist/db/repositories/interaction-analysis.d.ts.map +1 -0
- package/dist/db/repositories/interaction-analysis.js +340 -0
- package/dist/db/repositories/interaction-analysis.js.map +1 -0
- package/dist/db/repositories/interaction-repository.d.ts +145 -0
- package/dist/db/repositories/interaction-repository.d.ts.map +1 -0
- package/dist/db/repositories/interaction-repository.js +395 -0
- package/dist/db/repositories/interaction-repository.js.map +1 -0
- package/dist/db/repositories/metadata-repository.d.ts +110 -0
- package/dist/db/repositories/metadata-repository.d.ts.map +1 -0
- package/dist/db/repositories/metadata-repository.js +294 -0
- package/dist/db/repositories/metadata-repository.js.map +1 -0
- package/dist/db/repositories/module-repository.d.ts +162 -0
- package/dist/db/repositories/module-repository.d.ts.map +1 -0
- package/dist/db/repositories/module-repository.js +519 -0
- package/dist/db/repositories/module-repository.js.map +1 -0
- package/dist/db/repositories/relationship-repository.d.ts +98 -0
- package/dist/db/repositories/relationship-repository.d.ts.map +1 -0
- package/dist/db/repositories/relationship-repository.js +421 -0
- package/dist/db/repositories/relationship-repository.js.map +1 -0
- package/dist/db/schema-manager.d.ts +31 -0
- package/dist/db/schema-manager.d.ts.map +1 -0
- package/dist/db/schema-manager.js +398 -0
- package/dist/db/schema-manager.js.map +1 -0
- package/dist/db/schema.d.ts +404 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +234 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/db/utils/tree-builder.d.ts +25 -0
- package/dist/db/utils/tree-builder.d.ts.map +1 -0
- package/dist/db/utils/tree-builder.js +38 -0
- package/dist/db/utils/tree-builder.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/parser/ast-parser.d.ts +23 -0
- package/dist/parser/ast-parser.d.ts.map +1 -0
- package/dist/parser/ast-parser.js +65 -0
- package/dist/parser/ast-parser.js.map +1 -0
- package/dist/parser/definition-extractor.d.ts +29 -0
- package/dist/parser/definition-extractor.d.ts.map +1 -0
- package/dist/parser/definition-extractor.js +379 -0
- package/dist/parser/definition-extractor.js.map +1 -0
- package/dist/parser/reference-extractor.d.ts +72 -0
- package/dist/parser/reference-extractor.d.ts.map +1 -0
- package/dist/parser/reference-extractor.js +759 -0
- package/dist/parser/reference-extractor.js.map +1 -0
- package/dist/utils/file-scanner.d.ts +6 -0
- package/dist/utils/file-scanner.d.ts.map +1 -0
- package/dist/utils/file-scanner.js +33 -0
- package/dist/utils/file-scanner.js.map +1 -0
- package/dist/web/api-transforms.d.ts +4 -0
- package/dist/web/api-transforms.d.ts.map +1 -0
- package/dist/web/api-transforms.js +4 -0
- package/dist/web/api-transforms.js.map +1 -0
- package/dist/web/server.d.ts +16 -0
- package/dist/web/server.d.ts.map +1 -0
- package/dist/web/server.js +229 -0
- package/dist/web/server.js.map +1 -0
- package/dist/web/server.test.d.ts +2 -0
- package/dist/web/server.test.d.ts.map +1 -0
- package/dist/web/server.test.js +505 -0
- package/dist/web/server.test.js.map +1 -0
- package/dist/web/transforms/flow-transforms.d.ts +117 -0
- package/dist/web/transforms/flow-transforms.d.ts.map +1 -0
- package/dist/web/transforms/flow-transforms.js +202 -0
- package/dist/web/transforms/flow-transforms.js.map +1 -0
- package/dist/web/transforms/index.d.ts +4 -0
- package/dist/web/transforms/index.d.ts.map +1 -0
- package/dist/web/transforms/index.js +4 -0
- package/dist/web/transforms/index.js.map +1 -0
- package/dist/web/transforms/module-transforms.d.ts +42 -0
- package/dist/web/transforms/module-transforms.d.ts.map +1 -0
- package/dist/web/transforms/module-transforms.js +64 -0
- package/dist/web/transforms/module-transforms.js.map +1 -0
- package/dist/web/transforms/symbol-transforms.d.ts +31 -0
- package/dist/web/transforms/symbol-transforms.d.ts.map +1 -0
- package/dist/web/transforms/symbol-transforms.js +95 -0
- package/dist/web/transforms/symbol-transforms.js.map +1 -0
- package/package.json +96 -0
- package/ui/dist/assets/index-DP3dRMlh.js +268 -0
- package/ui/dist/assets/index-DP3dRMlh.js.map +1 -0
- package/ui/dist/assets/index-Db204Xn1.css +1 -0
- package/ui/dist/index.html +67 -0
|
@@ -0,0 +1,759 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
const EXTENSIONS_TO_TRY = ['.ts', '.tsx', '.js', '.jsx'];
|
|
4
|
+
const INDEX_FILES = ['index.ts', 'index.tsx', 'index.js', 'index.jsx'];
|
|
5
|
+
// Cache for package.json imports field lookups
|
|
6
|
+
const packageJsonCache = new Map();
|
|
7
|
+
/**
|
|
8
|
+
* Find the nearest package.json with an imports field
|
|
9
|
+
*/
|
|
10
|
+
function findPackageJsonImports(startDir) {
|
|
11
|
+
if (packageJsonCache.has(startDir)) {
|
|
12
|
+
return packageJsonCache.get(startDir) ?? null;
|
|
13
|
+
}
|
|
14
|
+
let dir = startDir;
|
|
15
|
+
while (dir !== path.dirname(dir)) {
|
|
16
|
+
const pkgPath = path.join(dir, 'package.json');
|
|
17
|
+
try {
|
|
18
|
+
const content = fs.readFileSync(pkgPath, 'utf-8');
|
|
19
|
+
const pkg = JSON.parse(content);
|
|
20
|
+
if (pkg.imports && typeof pkg.imports === 'object') {
|
|
21
|
+
const result = { imports: pkg.imports, dir };
|
|
22
|
+
packageJsonCache.set(startDir, result);
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// not found, continue up the tree
|
|
28
|
+
}
|
|
29
|
+
dir = path.dirname(dir);
|
|
30
|
+
}
|
|
31
|
+
packageJsonCache.set(startDir, null);
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Resolve a subpath import (#...) using package.json imports field
|
|
36
|
+
*/
|
|
37
|
+
function resolveSubpathImport(source, imports, pkgDir) {
|
|
38
|
+
// Sort by specificity (longer patterns first)
|
|
39
|
+
const patterns = Object.keys(imports).sort((a, b) => b.length - a.length);
|
|
40
|
+
for (const pattern of patterns) {
|
|
41
|
+
if (pattern.includes('*')) {
|
|
42
|
+
// Wildcard pattern: #core/* -> ./src/modules/core/*
|
|
43
|
+
const prefix = pattern.slice(0, pattern.indexOf('*'));
|
|
44
|
+
if (source.startsWith(prefix)) {
|
|
45
|
+
const suffix = source.slice(prefix.length);
|
|
46
|
+
const target = imports[pattern];
|
|
47
|
+
if (typeof target === 'string') {
|
|
48
|
+
const resolved = target.replace('*', suffix);
|
|
49
|
+
return path.resolve(pkgDir, resolved);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else if (source === pattern) {
|
|
54
|
+
// Exact match
|
|
55
|
+
const target = imports[pattern];
|
|
56
|
+
if (typeof target === 'string') {
|
|
57
|
+
return path.resolve(pkgDir, target);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Resolve an import path to an absolute path if it exists in the known files set
|
|
65
|
+
*/
|
|
66
|
+
export function resolveImportPath(source, fromFile, knownFiles) {
|
|
67
|
+
const fromDir = path.dirname(fromFile);
|
|
68
|
+
// Handle subpath imports (#...)
|
|
69
|
+
if (source.startsWith('#')) {
|
|
70
|
+
const pkgInfo = findPackageJsonImports(fromDir);
|
|
71
|
+
if (pkgInfo) {
|
|
72
|
+
const resolved = resolveSubpathImport(source, pkgInfo.imports, pkgInfo.dir);
|
|
73
|
+
if (resolved) {
|
|
74
|
+
// Try exact match first
|
|
75
|
+
if (knownFiles.has(resolved))
|
|
76
|
+
return resolved;
|
|
77
|
+
// Try with extensions
|
|
78
|
+
for (const ext of EXTENSIONS_TO_TRY) {
|
|
79
|
+
if (knownFiles.has(resolved + ext))
|
|
80
|
+
return resolved + ext;
|
|
81
|
+
}
|
|
82
|
+
// Try index files
|
|
83
|
+
for (const ext of EXTENSIONS_TO_TRY) {
|
|
84
|
+
const indexPath = path.join(resolved, `index${ext}`);
|
|
85
|
+
if (knownFiles.has(indexPath))
|
|
86
|
+
return indexPath;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
// External packages can't be resolved
|
|
93
|
+
if (!source.startsWith('.') && !source.startsWith('/')) {
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
const resolved = path.resolve(fromDir, source);
|
|
97
|
+
// Try exact match first
|
|
98
|
+
if (knownFiles.has(resolved)) {
|
|
99
|
+
return resolved;
|
|
100
|
+
}
|
|
101
|
+
// Try adding extensions
|
|
102
|
+
for (const ext of EXTENSIONS_TO_TRY) {
|
|
103
|
+
const withExt = resolved + ext;
|
|
104
|
+
if (knownFiles.has(withExt)) {
|
|
105
|
+
return withExt;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Handle TypeScript ESM imports that use .js extension
|
|
109
|
+
// (e.g., import './foo.js' when actual file is './foo.ts')
|
|
110
|
+
const ext = path.extname(resolved);
|
|
111
|
+
if (ext === '.js' || ext === '.jsx') {
|
|
112
|
+
const withoutExt = resolved.slice(0, -ext.length);
|
|
113
|
+
const tsExt = ext === '.js' ? '.ts' : '.tsx';
|
|
114
|
+
const tsPath = withoutExt + tsExt;
|
|
115
|
+
if (knownFiles.has(tsPath)) {
|
|
116
|
+
return tsPath;
|
|
117
|
+
}
|
|
118
|
+
// Also try the alternative: .js -> .tsx, .jsx -> .ts
|
|
119
|
+
const altTsExt = ext === '.js' ? '.tsx' : '.ts';
|
|
120
|
+
const altTsPath = withoutExt + altTsExt;
|
|
121
|
+
if (knownFiles.has(altTsPath)) {
|
|
122
|
+
return altTsPath;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// Try as directory with index file
|
|
126
|
+
for (const indexFile of INDEX_FILES) {
|
|
127
|
+
const withIndex = path.join(resolved, indexFile);
|
|
128
|
+
if (knownFiles.has(withIndex)) {
|
|
129
|
+
return withIndex;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Check if an identifier node should be tracked as a usage
|
|
136
|
+
* Returns false for identifiers that are:
|
|
137
|
+
* - Part of import/export declarations
|
|
138
|
+
* - Property names in object literals
|
|
139
|
+
* - Property access on right side
|
|
140
|
+
*/
|
|
141
|
+
function isValidUsage(node) {
|
|
142
|
+
const parent = node.parent;
|
|
143
|
+
if (!parent)
|
|
144
|
+
return true;
|
|
145
|
+
const parentType = parent.type;
|
|
146
|
+
// Skip if part of import/export declaration
|
|
147
|
+
if (parentType === 'import_specifier' ||
|
|
148
|
+
parentType === 'export_specifier' ||
|
|
149
|
+
parentType === 'import_clause' ||
|
|
150
|
+
parentType === 'namespace_import' ||
|
|
151
|
+
parentType === 'named_imports') {
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
// Skip if this is the property name in a property access (right side of .)
|
|
155
|
+
if (parentType === 'member_expression') {
|
|
156
|
+
const propertyNode = parent.childForFieldName('property');
|
|
157
|
+
if (propertyNode && propertyNode.id === node.id) {
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
// Skip if this is a shorthand property key in object literal
|
|
162
|
+
if (parentType === 'shorthand_property_identifier_pattern') {
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
// Skip if this is a property key (not value) in object literal
|
|
166
|
+
if (parentType === 'pair') {
|
|
167
|
+
const keyNode = parent.childForFieldName('key');
|
|
168
|
+
if (keyNode && keyNode.id === node.id) {
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// Skip if this is part of a function/method/property definition name
|
|
173
|
+
if (parentType === 'function_declaration' ||
|
|
174
|
+
parentType === 'method_definition' ||
|
|
175
|
+
parentType === 'class_declaration' ||
|
|
176
|
+
parentType === 'variable_declarator') {
|
|
177
|
+
const nameNode = parent.childForFieldName('name');
|
|
178
|
+
if (nameNode && nameNode.id === node.id) {
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return true;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Count the number of arguments in an arguments node
|
|
186
|
+
*/
|
|
187
|
+
function countArguments(argsNode) {
|
|
188
|
+
let count = 0;
|
|
189
|
+
for (let i = 0; i < argsNode.childCount; i++) {
|
|
190
|
+
const child = argsNode.child(i);
|
|
191
|
+
if (child) {
|
|
192
|
+
// Skip punctuation: (, ), ,
|
|
193
|
+
const type = child.type;
|
|
194
|
+
if (type !== '(' && type !== ')' && type !== ',') {
|
|
195
|
+
count++;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return count;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Get the context (parent node type) for a usage, with optional callsite metadata
|
|
203
|
+
*/
|
|
204
|
+
function getUsageContext(node) {
|
|
205
|
+
const parent = node.parent;
|
|
206
|
+
if (!parent)
|
|
207
|
+
return { context: 'unknown' };
|
|
208
|
+
// Check for new_expression (constructor call): new Foo()
|
|
209
|
+
if (parent.type === 'new_expression') {
|
|
210
|
+
const argsNode = parent.childForFieldName('arguments');
|
|
211
|
+
return {
|
|
212
|
+
context: 'new_expression',
|
|
213
|
+
callsite: {
|
|
214
|
+
argumentCount: argsNode ? countArguments(argsNode) : 0,
|
|
215
|
+
isMethodCall: false,
|
|
216
|
+
isConstructorCall: true,
|
|
217
|
+
},
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
// Direct function call: foo()
|
|
221
|
+
if (parent.type === 'call_expression') {
|
|
222
|
+
const functionNode = parent.childForFieldName('function');
|
|
223
|
+
// Make sure this identifier is the function being called, not an argument
|
|
224
|
+
if (functionNode && functionNode.id === node.id) {
|
|
225
|
+
const argsNode = parent.childForFieldName('arguments');
|
|
226
|
+
return {
|
|
227
|
+
context: 'call_expression',
|
|
228
|
+
callsite: {
|
|
229
|
+
argumentCount: argsNode ? countArguments(argsNode) : 0,
|
|
230
|
+
isMethodCall: false,
|
|
231
|
+
isConstructorCall: false,
|
|
232
|
+
},
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
return { context: 'call_expression' };
|
|
236
|
+
}
|
|
237
|
+
// For member expressions, look at what the member expression is used for
|
|
238
|
+
if (parent.type === 'member_expression') {
|
|
239
|
+
const grandparent = parent.parent;
|
|
240
|
+
// Method call: obj.foo() - the identifier is the object, not the method
|
|
241
|
+
if (grandparent?.type === 'call_expression') {
|
|
242
|
+
// Check if this identifier is the object of the member expression
|
|
243
|
+
const objectNode = parent.childForFieldName('object');
|
|
244
|
+
if (objectNode && objectNode.id === node.id) {
|
|
245
|
+
const argsNode = grandparent.childForFieldName('arguments');
|
|
246
|
+
return {
|
|
247
|
+
context: 'call_expression',
|
|
248
|
+
callsite: {
|
|
249
|
+
argumentCount: argsNode ? countArguments(argsNode) : 0,
|
|
250
|
+
isMethodCall: true,
|
|
251
|
+
isConstructorCall: false,
|
|
252
|
+
receiverName: node.text,
|
|
253
|
+
},
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
return { context: 'call_expression' };
|
|
257
|
+
}
|
|
258
|
+
return { context: 'member_expression' };
|
|
259
|
+
}
|
|
260
|
+
return { context: parent.type };
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Find all usages of a symbol name in the AST
|
|
264
|
+
*/
|
|
265
|
+
export function findSymbolUsages(rootNode, symbolName) {
|
|
266
|
+
const usages = [];
|
|
267
|
+
function walk(node) {
|
|
268
|
+
// Check both regular identifiers and type identifiers (for type annotations)
|
|
269
|
+
if ((node.type === 'identifier' || node.type === 'type_identifier') && node.text === symbolName) {
|
|
270
|
+
if (isValidUsage(node)) {
|
|
271
|
+
const usageInfo = getUsageContext(node);
|
|
272
|
+
const usage = {
|
|
273
|
+
position: {
|
|
274
|
+
row: node.startPosition.row,
|
|
275
|
+
column: node.startPosition.column,
|
|
276
|
+
},
|
|
277
|
+
context: usageInfo.context,
|
|
278
|
+
};
|
|
279
|
+
if (usageInfo.callsite) {
|
|
280
|
+
usage.callsite = usageInfo.callsite;
|
|
281
|
+
}
|
|
282
|
+
usages.push(usage);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
for (let i = 0; i < node.childCount; i++) {
|
|
286
|
+
const child = node.child(i);
|
|
287
|
+
if (child) {
|
|
288
|
+
walk(child);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
walk(rootNode);
|
|
293
|
+
return usages;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Extract the source string from an import/export/require statement
|
|
297
|
+
*/
|
|
298
|
+
function extractSourceString(node) {
|
|
299
|
+
// Look for string child which contains the path
|
|
300
|
+
for (let i = 0; i < node.childCount; i++) {
|
|
301
|
+
const child = node.child(i);
|
|
302
|
+
if (child?.type === 'string') {
|
|
303
|
+
// Remove quotes from the string
|
|
304
|
+
const text = child.text;
|
|
305
|
+
return text.slice(1, -1);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
return null;
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Check if an import/export is type-only
|
|
312
|
+
*/
|
|
313
|
+
function isTypeOnlyImport(node) {
|
|
314
|
+
for (let i = 0; i < node.childCount; i++) {
|
|
315
|
+
const child = node.child(i);
|
|
316
|
+
if (child?.type === 'type' || child?.text === 'type') {
|
|
317
|
+
return true;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
return false;
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Extract imported symbols from an import statement
|
|
324
|
+
*/
|
|
325
|
+
function extractImportedSymbols(importNode, rootNode) {
|
|
326
|
+
const symbols = [];
|
|
327
|
+
const importClause = importNode.childForFieldName('import') || findChildByType(importNode, 'import_clause');
|
|
328
|
+
if (!importClause) {
|
|
329
|
+
// Side-effect import: import './file'
|
|
330
|
+
return [
|
|
331
|
+
{
|
|
332
|
+
name: '*',
|
|
333
|
+
localName: '*',
|
|
334
|
+
kind: 'side-effect',
|
|
335
|
+
usages: [],
|
|
336
|
+
},
|
|
337
|
+
];
|
|
338
|
+
}
|
|
339
|
+
// Process import clause children
|
|
340
|
+
for (let i = 0; i < importClause.childCount; i++) {
|
|
341
|
+
const child = importClause.child(i);
|
|
342
|
+
if (!child)
|
|
343
|
+
continue;
|
|
344
|
+
if (child.type === 'identifier') {
|
|
345
|
+
// Default import: import Foo from './file'
|
|
346
|
+
const localName = child.text;
|
|
347
|
+
symbols.push({
|
|
348
|
+
name: 'default',
|
|
349
|
+
localName,
|
|
350
|
+
kind: 'default',
|
|
351
|
+
usages: findSymbolUsages(rootNode, localName),
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
else if (child.type === 'namespace_import') {
|
|
355
|
+
// Namespace import: import * as Foo from './file'
|
|
356
|
+
const nameNode = child.childForFieldName('name') || findChildByType(child, 'identifier');
|
|
357
|
+
if (nameNode) {
|
|
358
|
+
const localName = nameNode.text;
|
|
359
|
+
symbols.push({
|
|
360
|
+
name: '*',
|
|
361
|
+
localName,
|
|
362
|
+
kind: 'namespace',
|
|
363
|
+
usages: findSymbolUsages(rootNode, localName),
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
else if (child.type === 'named_imports') {
|
|
368
|
+
// Named imports: import { A, B as C } from './file'
|
|
369
|
+
for (let j = 0; j < child.childCount; j++) {
|
|
370
|
+
const specifier = child.child(j);
|
|
371
|
+
if (specifier?.type === 'import_specifier') {
|
|
372
|
+
const nameNode = specifier.childForFieldName('name');
|
|
373
|
+
const aliasNode = specifier.childForFieldName('alias');
|
|
374
|
+
const originalName = nameNode?.text || '';
|
|
375
|
+
const localName = aliasNode?.text || originalName;
|
|
376
|
+
if (originalName) {
|
|
377
|
+
symbols.push({
|
|
378
|
+
name: originalName,
|
|
379
|
+
localName,
|
|
380
|
+
kind: 'named',
|
|
381
|
+
usages: findSymbolUsages(rootNode, localName),
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
return symbols;
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* Extract exported symbols from a re-export statement.
|
|
392
|
+
* For re-exports, we create a synthetic usage at the export location
|
|
393
|
+
* to ensure dependency edges are created in the database.
|
|
394
|
+
*/
|
|
395
|
+
function extractReExportedSymbols(exportNode, _rootNode) {
|
|
396
|
+
const symbols = [];
|
|
397
|
+
const exportClause = findChildByType(exportNode, 'export_clause');
|
|
398
|
+
// Synthetic usage at the export statement location
|
|
399
|
+
const syntheticUsage = {
|
|
400
|
+
position: {
|
|
401
|
+
row: exportNode.startPosition.row,
|
|
402
|
+
column: exportNode.startPosition.column,
|
|
403
|
+
},
|
|
404
|
+
context: 're-export',
|
|
405
|
+
};
|
|
406
|
+
if (!exportClause) {
|
|
407
|
+
// Check for export * from './file'
|
|
408
|
+
for (let i = 0; i < exportNode.childCount; i++) {
|
|
409
|
+
const child = exportNode.child(i);
|
|
410
|
+
if (child?.text === '*') {
|
|
411
|
+
return [
|
|
412
|
+
{
|
|
413
|
+
name: '*',
|
|
414
|
+
localName: '*',
|
|
415
|
+
kind: 'namespace',
|
|
416
|
+
usages: [syntheticUsage],
|
|
417
|
+
},
|
|
418
|
+
];
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
return symbols;
|
|
422
|
+
}
|
|
423
|
+
// Named re-exports: export { A, B as C } from './file'
|
|
424
|
+
for (let i = 0; i < exportClause.childCount; i++) {
|
|
425
|
+
const specifier = exportClause.child(i);
|
|
426
|
+
if (specifier?.type === 'export_specifier') {
|
|
427
|
+
const nameNode = specifier.childForFieldName('name');
|
|
428
|
+
const aliasNode = specifier.childForFieldName('alias');
|
|
429
|
+
const originalName = nameNode?.text || '';
|
|
430
|
+
const localName = aliasNode?.text || originalName;
|
|
431
|
+
if (originalName) {
|
|
432
|
+
symbols.push({
|
|
433
|
+
name: originalName,
|
|
434
|
+
localName,
|
|
435
|
+
kind: 'named',
|
|
436
|
+
usages: [syntheticUsage],
|
|
437
|
+
});
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
return symbols;
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* Helper to find a child node by type
|
|
445
|
+
*/
|
|
446
|
+
function findChildByType(node, type) {
|
|
447
|
+
for (let i = 0; i < node.childCount; i++) {
|
|
448
|
+
const child = node.child(i);
|
|
449
|
+
if (child?.type === type) {
|
|
450
|
+
return child;
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
return null;
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* Extract dynamic import from a call expression
|
|
457
|
+
*/
|
|
458
|
+
function extractDynamicImport(callNode, _rootNode, filePath, knownFiles) {
|
|
459
|
+
// Check if this is import()
|
|
460
|
+
const functionNode = callNode.childForFieldName('function');
|
|
461
|
+
if (!functionNode || functionNode.text !== 'import') {
|
|
462
|
+
return null;
|
|
463
|
+
}
|
|
464
|
+
const args = callNode.childForFieldName('arguments');
|
|
465
|
+
if (!args)
|
|
466
|
+
return null;
|
|
467
|
+
const firstArg = args.child(1); // Skip opening paren
|
|
468
|
+
if (!firstArg || firstArg.type !== 'string')
|
|
469
|
+
return null;
|
|
470
|
+
const source = firstArg.text.slice(1, -1);
|
|
471
|
+
const isExternal = !source.startsWith('.') && !source.startsWith('/') && !source.startsWith('#');
|
|
472
|
+
return {
|
|
473
|
+
type: 'dynamic-import',
|
|
474
|
+
source,
|
|
475
|
+
resolvedPath: resolveImportPath(source, filePath, knownFiles),
|
|
476
|
+
isExternal,
|
|
477
|
+
isTypeOnly: false,
|
|
478
|
+
imports: [
|
|
479
|
+
{
|
|
480
|
+
name: '*',
|
|
481
|
+
localName: '*',
|
|
482
|
+
kind: 'namespace',
|
|
483
|
+
usages: [],
|
|
484
|
+
},
|
|
485
|
+
],
|
|
486
|
+
position: {
|
|
487
|
+
row: callNode.startPosition.row,
|
|
488
|
+
column: callNode.startPosition.column,
|
|
489
|
+
},
|
|
490
|
+
};
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* Extract require() call from a call expression
|
|
494
|
+
*/
|
|
495
|
+
function extractRequireCall(callNode, rootNode, filePath, knownFiles) {
|
|
496
|
+
const functionNode = callNode.childForFieldName('function');
|
|
497
|
+
if (!functionNode || functionNode.text !== 'require') {
|
|
498
|
+
return null;
|
|
499
|
+
}
|
|
500
|
+
const args = callNode.childForFieldName('arguments');
|
|
501
|
+
if (!args)
|
|
502
|
+
return null;
|
|
503
|
+
const firstArg = args.child(1); // Skip opening paren
|
|
504
|
+
if (!firstArg || firstArg.type !== 'string')
|
|
505
|
+
return null;
|
|
506
|
+
const source = firstArg.text.slice(1, -1);
|
|
507
|
+
const isExternal = !source.startsWith('.') && !source.startsWith('/') && !source.startsWith('#');
|
|
508
|
+
// Try to find what variable this require is assigned to
|
|
509
|
+
const imports = [];
|
|
510
|
+
const parent = callNode.parent;
|
|
511
|
+
if (parent?.type === 'variable_declarator') {
|
|
512
|
+
const nameNode = parent.childForFieldName('name');
|
|
513
|
+
if (nameNode) {
|
|
514
|
+
if (nameNode.type === 'identifier') {
|
|
515
|
+
const localName = nameNode.text;
|
|
516
|
+
imports.push({
|
|
517
|
+
name: '*',
|
|
518
|
+
localName,
|
|
519
|
+
kind: 'namespace',
|
|
520
|
+
usages: findSymbolUsages(rootNode, localName),
|
|
521
|
+
});
|
|
522
|
+
}
|
|
523
|
+
else if (nameNode.type === 'object_pattern') {
|
|
524
|
+
// Destructured require: const { a, b } = require('./file')
|
|
525
|
+
for (let i = 0; i < nameNode.childCount; i++) {
|
|
526
|
+
const prop = nameNode.child(i);
|
|
527
|
+
if (prop?.type === 'shorthand_property_identifier_pattern') {
|
|
528
|
+
const localName = prop.text;
|
|
529
|
+
imports.push({
|
|
530
|
+
name: localName,
|
|
531
|
+
localName,
|
|
532
|
+
kind: 'named',
|
|
533
|
+
usages: findSymbolUsages(rootNode, localName),
|
|
534
|
+
});
|
|
535
|
+
}
|
|
536
|
+
else if (prop?.type === 'pair_pattern') {
|
|
537
|
+
const keyNode = prop.childForFieldName('key');
|
|
538
|
+
const valueNode = prop.childForFieldName('value');
|
|
539
|
+
if (keyNode && valueNode) {
|
|
540
|
+
imports.push({
|
|
541
|
+
name: keyNode.text,
|
|
542
|
+
localName: valueNode.text,
|
|
543
|
+
kind: 'named',
|
|
544
|
+
usages: findSymbolUsages(rootNode, valueNode.text),
|
|
545
|
+
});
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
if (imports.length === 0) {
|
|
553
|
+
imports.push({
|
|
554
|
+
name: '*',
|
|
555
|
+
localName: '*',
|
|
556
|
+
kind: 'side-effect',
|
|
557
|
+
usages: [],
|
|
558
|
+
});
|
|
559
|
+
}
|
|
560
|
+
return {
|
|
561
|
+
type: 'require',
|
|
562
|
+
source,
|
|
563
|
+
resolvedPath: resolveImportPath(source, filePath, knownFiles),
|
|
564
|
+
isExternal,
|
|
565
|
+
isTypeOnly: false,
|
|
566
|
+
imports,
|
|
567
|
+
position: {
|
|
568
|
+
row: callNode.startPosition.row,
|
|
569
|
+
column: callNode.startPosition.column,
|
|
570
|
+
},
|
|
571
|
+
};
|
|
572
|
+
}
|
|
573
|
+
/**
|
|
574
|
+
* Extract all references from an AST
|
|
575
|
+
*/
|
|
576
|
+
export function extractReferences(rootNode, filePath, knownFiles) {
|
|
577
|
+
const references = [];
|
|
578
|
+
function walk(node) {
|
|
579
|
+
if (node.type === 'import_statement') {
|
|
580
|
+
const source = extractSourceString(node);
|
|
581
|
+
if (source) {
|
|
582
|
+
const isExternal = !source.startsWith('.') && !source.startsWith('/') && !source.startsWith('#');
|
|
583
|
+
const isTypeOnly = isTypeOnlyImport(node);
|
|
584
|
+
const imports = extractImportedSymbols(node, rootNode);
|
|
585
|
+
references.push({
|
|
586
|
+
type: 'import',
|
|
587
|
+
source,
|
|
588
|
+
resolvedPath: resolveImportPath(source, filePath, knownFiles),
|
|
589
|
+
isExternal,
|
|
590
|
+
isTypeOnly,
|
|
591
|
+
imports,
|
|
592
|
+
position: {
|
|
593
|
+
row: node.startPosition.row,
|
|
594
|
+
column: node.startPosition.column,
|
|
595
|
+
},
|
|
596
|
+
});
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
else if (node.type === 'export_statement') {
|
|
600
|
+
const source = extractSourceString(node);
|
|
601
|
+
if (source) {
|
|
602
|
+
// This is a re-export
|
|
603
|
+
const isExternal = !source.startsWith('.') && !source.startsWith('/') && !source.startsWith('#');
|
|
604
|
+
const imports = extractReExportedSymbols(node, rootNode);
|
|
605
|
+
// Determine if it's export-all or re-export
|
|
606
|
+
const isExportAll = imports.some((imp) => imp.name === '*' && imp.kind === 'namespace');
|
|
607
|
+
references.push({
|
|
608
|
+
type: isExportAll ? 'export-all' : 're-export',
|
|
609
|
+
source,
|
|
610
|
+
resolvedPath: resolveImportPath(source, filePath, knownFiles),
|
|
611
|
+
isExternal,
|
|
612
|
+
isTypeOnly: isTypeOnlyImport(node),
|
|
613
|
+
imports,
|
|
614
|
+
position: {
|
|
615
|
+
row: node.startPosition.row,
|
|
616
|
+
column: node.startPosition.column,
|
|
617
|
+
},
|
|
618
|
+
});
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
else if (node.type === 'call_expression') {
|
|
622
|
+
// Check for dynamic import
|
|
623
|
+
const dynamicImport = extractDynamicImport(node, rootNode, filePath, knownFiles);
|
|
624
|
+
if (dynamicImport) {
|
|
625
|
+
references.push(dynamicImport);
|
|
626
|
+
return; // Don't recurse into import()
|
|
627
|
+
}
|
|
628
|
+
// Check for require()
|
|
629
|
+
const requireCall = extractRequireCall(node, rootNode, filePath, knownFiles);
|
|
630
|
+
if (requireCall) {
|
|
631
|
+
references.push(requireCall);
|
|
632
|
+
return; // Don't recurse into require()
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
// Recurse into children
|
|
636
|
+
for (let i = 0; i < node.childCount; i++) {
|
|
637
|
+
const child = node.child(i);
|
|
638
|
+
if (child) {
|
|
639
|
+
walk(child);
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
walk(rootNode);
|
|
644
|
+
return references;
|
|
645
|
+
}
|
|
646
|
+
/**
|
|
647
|
+
* Check if a usage is in a type context (type reference rather than value reference).
|
|
648
|
+
* Type contexts include: type annotations, generic type arguments, extends/implements clauses.
|
|
649
|
+
*/
|
|
650
|
+
function isTypeContext(context) {
|
|
651
|
+
const typeContexts = [
|
|
652
|
+
'type_annotation',
|
|
653
|
+
'type_arguments',
|
|
654
|
+
'generic_type',
|
|
655
|
+
'type_identifier',
|
|
656
|
+
'extends_clause',
|
|
657
|
+
'extends_type_clause',
|
|
658
|
+
'implements_clause',
|
|
659
|
+
'type_alias_declaration',
|
|
660
|
+
'constraint',
|
|
661
|
+
'intersection_type',
|
|
662
|
+
'union_type',
|
|
663
|
+
'mapped_type',
|
|
664
|
+
'conditional_type',
|
|
665
|
+
'indexed_access_type',
|
|
666
|
+
'type_query',
|
|
667
|
+
'predefined_type',
|
|
668
|
+
'parenthesized_type',
|
|
669
|
+
'optional_type',
|
|
670
|
+
'readonly_type',
|
|
671
|
+
'tuple_type',
|
|
672
|
+
'array_type',
|
|
673
|
+
'function_type',
|
|
674
|
+
'constructor_type',
|
|
675
|
+
'index_signature',
|
|
676
|
+
];
|
|
677
|
+
return typeContexts.includes(context);
|
|
678
|
+
}
|
|
679
|
+
/**
|
|
680
|
+
* Extract internal usages of definitions within the same file.
|
|
681
|
+
* This captures calls to local functions, classes, etc. that are not imported.
|
|
682
|
+
* @param includeTypeUsages - If true, also include type usages (not just call usages)
|
|
683
|
+
*/
|
|
684
|
+
export function extractInternalUsages(rootNode, definitions, includeTypeUsages = true) {
|
|
685
|
+
const results = [];
|
|
686
|
+
for (const def of definitions) {
|
|
687
|
+
// Find all usages of this definition's name
|
|
688
|
+
const usages = findSymbolUsages(rootNode, def.name);
|
|
689
|
+
// Filter out the definition itself (where the function/class is declared)
|
|
690
|
+
// by checking if the usage is at the same position as the definition
|
|
691
|
+
const filteredUsages = usages.filter((usage) => {
|
|
692
|
+
// Definition position is 0-based, usage position is also 0-based
|
|
693
|
+
const isDefinitionSite = usage.position.row === def.position.row && usage.position.column === def.position.column;
|
|
694
|
+
return !isDefinitionSite;
|
|
695
|
+
});
|
|
696
|
+
// Include call usages
|
|
697
|
+
const callUsages = filteredUsages.filter((u) => u.callsite);
|
|
698
|
+
// Optionally include type usages
|
|
699
|
+
let typeUsages = [];
|
|
700
|
+
if (includeTypeUsages) {
|
|
701
|
+
typeUsages = filteredUsages.filter((u) => !u.callsite && isTypeContext(u.context));
|
|
702
|
+
}
|
|
703
|
+
const allUsages = [...callUsages, ...typeUsages];
|
|
704
|
+
if (allUsages.length > 0) {
|
|
705
|
+
results.push({
|
|
706
|
+
definitionName: def.name,
|
|
707
|
+
usages: allUsages,
|
|
708
|
+
});
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
return results;
|
|
712
|
+
}
|
|
713
|
+
/**
|
|
714
|
+
* Extract type references from type alias declarations.
|
|
715
|
+
* This captures dependencies like User in `type Foo = Omit<User, 'password'>`.
|
|
716
|
+
*/
|
|
717
|
+
export function extractTypeAliasReferences(rootNode) {
|
|
718
|
+
const results = [];
|
|
719
|
+
function walk(node) {
|
|
720
|
+
if (node.type === 'type_alias_declaration') {
|
|
721
|
+
const nameNode = node.childForFieldName('name');
|
|
722
|
+
const valueNode = node.childForFieldName('value');
|
|
723
|
+
if (nameNode && valueNode) {
|
|
724
|
+
const typeName = nameNode.text;
|
|
725
|
+
const referencedTypes = new Set();
|
|
726
|
+
// Extract all type_identifier nodes from the value
|
|
727
|
+
function collectTypeIdentifiers(n) {
|
|
728
|
+
if (n.type === 'type_identifier') {
|
|
729
|
+
// Exclude the declaration name itself
|
|
730
|
+
if (n.text !== typeName) {
|
|
731
|
+
referencedTypes.add(n.text);
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
for (let i = 0; i < n.childCount; i++) {
|
|
735
|
+
const child = n.child(i);
|
|
736
|
+
if (child)
|
|
737
|
+
collectTypeIdentifiers(child);
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
collectTypeIdentifiers(valueNode);
|
|
741
|
+
if (referencedTypes.size > 0) {
|
|
742
|
+
results.push({
|
|
743
|
+
typeName,
|
|
744
|
+
referencedTypes: Array.from(referencedTypes),
|
|
745
|
+
position: { row: node.startPosition.row, column: node.startPosition.column },
|
|
746
|
+
});
|
|
747
|
+
}
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
for (let i = 0; i < node.childCount; i++) {
|
|
751
|
+
const child = node.child(i);
|
|
752
|
+
if (child)
|
|
753
|
+
walk(child);
|
|
754
|
+
}
|
|
755
|
+
}
|
|
756
|
+
walk(rootNode);
|
|
757
|
+
return results;
|
|
758
|
+
}
|
|
759
|
+
//# sourceMappingURL=reference-extractor.js.map
|