@optave/codegraph 3.7.0 → 3.8.1
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/README.md +28 -16
- package/dist/ast-analysis/engine.d.ts.map +1 -1
- package/dist/ast-analysis/engine.js +195 -30
- package/dist/ast-analysis/engine.js.map +1 -1
- package/dist/ast-analysis/metrics.d.ts +0 -3
- package/dist/ast-analysis/metrics.d.ts.map +1 -1
- package/dist/ast-analysis/metrics.js +30 -13
- package/dist/ast-analysis/metrics.js.map +1 -1
- package/dist/ast-analysis/rules/javascript.d.ts.map +1 -1
- package/dist/ast-analysis/rules/javascript.js +0 -1
- package/dist/ast-analysis/rules/javascript.js.map +1 -1
- package/dist/ast-analysis/shared.d.ts.map +1 -1
- package/dist/ast-analysis/shared.js +24 -19
- package/dist/ast-analysis/shared.js.map +1 -1
- package/dist/ast-analysis/visitor-utils.d.ts.map +1 -1
- package/dist/ast-analysis/visitor-utils.js +55 -39
- package/dist/ast-analysis/visitor-utils.js.map +1 -1
- package/dist/ast-analysis/visitor.d.ts.map +1 -1
- package/dist/ast-analysis/visitor.js +91 -70
- package/dist/ast-analysis/visitor.js.map +1 -1
- package/dist/ast-analysis/visitors/ast-store-visitor.d.ts.map +1 -1
- package/dist/ast-analysis/visitors/ast-store-visitor.js +52 -129
- package/dist/ast-analysis/visitors/ast-store-visitor.js.map +1 -1
- package/dist/ast-analysis/visitors/complexity-visitor.d.ts.map +1 -1
- package/dist/ast-analysis/visitors/complexity-visitor.js +32 -39
- package/dist/ast-analysis/visitors/complexity-visitor.js.map +1 -1
- package/dist/ast-analysis/visitors/dataflow-visitor.d.ts.map +1 -1
- package/dist/ast-analysis/visitors/dataflow-visitor.js +57 -38
- package/dist/ast-analysis/visitors/dataflow-visitor.js.map +1 -1
- package/dist/cli/commands/ast.js +2 -2
- package/dist/cli/commands/ast.js.map +1 -1
- package/dist/cli/commands/watch.d.ts.map +1 -1
- package/dist/cli/commands/watch.js +16 -2
- package/dist/cli/commands/watch.js.map +1 -1
- package/dist/db/connection.d.ts.map +1 -1
- package/dist/db/connection.js +29 -26
- package/dist/db/connection.js.map +1 -1
- package/dist/db/query-builder.d.ts.map +1 -1
- package/dist/db/query-builder.js +16 -5
- package/dist/db/query-builder.js.map +1 -1
- package/dist/db/repository/base.d.ts +10 -0
- package/dist/db/repository/base.d.ts.map +1 -1
- package/dist/db/repository/base.js +17 -0
- package/dist/db/repository/base.js.map +1 -1
- package/dist/db/repository/native-repository.d.ts +6 -1
- package/dist/db/repository/native-repository.d.ts.map +1 -1
- package/dist/db/repository/native-repository.js +77 -1
- package/dist/db/repository/native-repository.js.map +1 -1
- package/dist/db/repository/nodes.d.ts.map +1 -1
- package/dist/db/repository/nodes.js +8 -4
- package/dist/db/repository/nodes.js.map +1 -1
- package/dist/db/repository/sqlite-repository.d.ts +3 -0
- package/dist/db/repository/sqlite-repository.d.ts.map +1 -1
- package/dist/db/repository/sqlite-repository.js +26 -0
- package/dist/db/repository/sqlite-repository.js.map +1 -1
- package/dist/domain/analysis/brief.d.ts.map +1 -1
- package/dist/domain/analysis/brief.js +13 -17
- package/dist/domain/analysis/brief.js.map +1 -1
- package/dist/domain/analysis/context.d.ts.map +1 -1
- package/dist/domain/analysis/context.js +14 -11
- package/dist/domain/analysis/context.js.map +1 -1
- package/dist/domain/analysis/dependencies.d.ts.map +1 -1
- package/dist/domain/analysis/dependencies.js +53 -52
- package/dist/domain/analysis/dependencies.js.map +1 -1
- package/dist/domain/analysis/fn-impact.d.ts +2 -7
- package/dist/domain/analysis/fn-impact.d.ts.map +1 -1
- package/dist/domain/analysis/fn-impact.js +33 -31
- package/dist/domain/analysis/fn-impact.js.map +1 -1
- package/dist/domain/analysis/implementations.d.ts.map +1 -1
- package/dist/domain/analysis/implementations.js +11 -19
- package/dist/domain/analysis/implementations.js.map +1 -1
- package/dist/domain/analysis/module-map.d.ts.map +1 -1
- package/dist/domain/analysis/module-map.js +55 -76
- package/dist/domain/analysis/module-map.js.map +1 -1
- package/dist/domain/analysis/query-helpers.d.ts +7 -0
- package/dist/domain/analysis/query-helpers.d.ts.map +1 -1
- package/dist/domain/analysis/query-helpers.js +15 -1
- package/dist/domain/analysis/query-helpers.js.map +1 -1
- package/dist/domain/graph/builder/pipeline.d.ts.map +1 -1
- package/dist/domain/graph/builder/pipeline.js +315 -43
- package/dist/domain/graph/builder/pipeline.js.map +1 -1
- package/dist/domain/graph/builder/stages/build-edges.d.ts.map +1 -1
- package/dist/domain/graph/builder/stages/build-edges.js +106 -1
- package/dist/domain/graph/builder/stages/build-edges.js.map +1 -1
- package/dist/domain/graph/builder/stages/collect-files.d.ts.map +1 -1
- package/dist/domain/graph/builder/stages/collect-files.js +17 -5
- package/dist/domain/graph/builder/stages/collect-files.js.map +1 -1
- package/dist/domain/graph/builder/stages/detect-changes.d.ts.map +1 -1
- package/dist/domain/graph/builder/stages/detect-changes.js +99 -51
- package/dist/domain/graph/builder/stages/detect-changes.js.map +1 -1
- package/dist/domain/graph/builder/stages/finalize.d.ts.map +1 -1
- package/dist/domain/graph/builder/stages/finalize.js +34 -7
- package/dist/domain/graph/builder/stages/finalize.js.map +1 -1
- package/dist/domain/graph/builder/stages/insert-nodes.d.ts.map +1 -1
- package/dist/domain/graph/builder/stages/insert-nodes.js +50 -26
- package/dist/domain/graph/builder/stages/insert-nodes.js.map +1 -1
- package/dist/domain/graph/builder/stages/resolve-imports.d.ts.map +1 -1
- package/dist/domain/graph/builder/stages/resolve-imports.js +95 -84
- package/dist/domain/graph/builder/stages/resolve-imports.js.map +1 -1
- package/dist/domain/graph/cycles.d.ts +6 -0
- package/dist/domain/graph/cycles.d.ts.map +1 -1
- package/dist/domain/graph/cycles.js +114 -22
- package/dist/domain/graph/cycles.js.map +1 -1
- package/dist/domain/graph/resolve.js +1 -1
- package/dist/domain/graph/resolve.js.map +1 -1
- package/dist/domain/graph/watcher.d.ts +2 -0
- package/dist/domain/graph/watcher.d.ts.map +1 -1
- package/dist/domain/graph/watcher.js +170 -75
- package/dist/domain/graph/watcher.js.map +1 -1
- package/dist/domain/parser.d.ts +1 -6
- package/dist/domain/parser.d.ts.map +1 -1
- package/dist/domain/parser.js +101 -32
- package/dist/domain/parser.js.map +1 -1
- package/dist/domain/search/generator.js +1 -1
- package/dist/domain/search/generator.js.map +1 -1
- package/dist/domain/search/models.d.ts +4 -3
- package/dist/domain/search/models.d.ts.map +1 -1
- package/dist/domain/search/models.js +18 -5
- package/dist/domain/search/models.js.map +1 -1
- package/dist/domain/search/search/hybrid.d.ts.map +1 -1
- package/dist/domain/search/search/hybrid.js +29 -18
- package/dist/domain/search/search/hybrid.js.map +1 -1
- package/dist/extractors/clojure.d.ts +12 -0
- package/dist/extractors/clojure.d.ts.map +1 -0
- package/dist/extractors/clojure.js +245 -0
- package/dist/extractors/clojure.js.map +1 -0
- package/dist/extractors/cuda.d.ts +11 -0
- package/dist/extractors/cuda.d.ts.map +1 -0
- package/dist/extractors/cuda.js +302 -0
- package/dist/extractors/cuda.js.map +1 -0
- package/dist/extractors/erlang.d.ts +14 -0
- package/dist/extractors/erlang.d.ts.map +1 -0
- package/dist/extractors/erlang.js +239 -0
- package/dist/extractors/erlang.js.map +1 -0
- package/dist/extractors/fsharp.d.ts +13 -0
- package/dist/extractors/fsharp.d.ts.map +1 -0
- package/dist/extractors/fsharp.js +218 -0
- package/dist/extractors/fsharp.js.map +1 -0
- package/dist/extractors/gleam.d.ts +14 -0
- package/dist/extractors/gleam.d.ts.map +1 -0
- package/dist/extractors/gleam.js +229 -0
- package/dist/extractors/gleam.js.map +1 -0
- package/dist/extractors/go.js +36 -33
- package/dist/extractors/go.js.map +1 -1
- package/dist/extractors/groovy.d.ts +10 -0
- package/dist/extractors/groovy.d.ts.map +1 -0
- package/dist/extractors/groovy.js +304 -0
- package/dist/extractors/groovy.js.map +1 -0
- package/dist/extractors/helpers.d.ts.map +1 -1
- package/dist/extractors/helpers.js +40 -29
- package/dist/extractors/helpers.js.map +1 -1
- package/dist/extractors/index.d.ts +11 -0
- package/dist/extractors/index.d.ts.map +1 -1
- package/dist/extractors/index.js +11 -0
- package/dist/extractors/index.js.map +1 -1
- package/dist/extractors/java.js +58 -46
- package/dist/extractors/java.js.map +1 -1
- package/dist/extractors/javascript.js +46 -45
- package/dist/extractors/javascript.js.map +1 -1
- package/dist/extractors/julia.d.ts +16 -0
- package/dist/extractors/julia.d.ts.map +1 -0
- package/dist/extractors/julia.js +287 -0
- package/dist/extractors/julia.js.map +1 -0
- package/dist/extractors/kotlin.js +84 -78
- package/dist/extractors/kotlin.js.map +1 -1
- package/dist/extractors/objc.d.ts +9 -0
- package/dist/extractors/objc.d.ts.map +1 -0
- package/dist/extractors/objc.js +406 -0
- package/dist/extractors/objc.js.map +1 -0
- package/dist/extractors/ocaml.js +74 -0
- package/dist/extractors/ocaml.js.map +1 -1
- package/dist/extractors/python.js +29 -24
- package/dist/extractors/python.js.map +1 -1
- package/dist/extractors/r.d.ts +13 -0
- package/dist/extractors/r.d.ts.map +1 -0
- package/dist/extractors/r.js +251 -0
- package/dist/extractors/r.js.map +1 -0
- package/dist/extractors/rust.js +41 -32
- package/dist/extractors/rust.js.map +1 -1
- package/dist/extractors/solidity.d.ts +9 -0
- package/dist/extractors/solidity.d.ts.map +1 -0
- package/dist/extractors/solidity.js +365 -0
- package/dist/extractors/solidity.js.map +1 -0
- package/dist/extractors/swift.js +83 -81
- package/dist/extractors/swift.js.map +1 -1
- package/dist/extractors/verilog.d.ts +9 -0
- package/dist/extractors/verilog.d.ts.map +1 -0
- package/dist/extractors/verilog.js +286 -0
- package/dist/extractors/verilog.js.map +1 -0
- package/dist/extractors/zig.js +58 -60
- package/dist/extractors/zig.js.map +1 -1
- package/dist/features/ast.d.ts +16 -14
- package/dist/features/ast.d.ts.map +1 -1
- package/dist/features/ast.js +84 -83
- package/dist/features/ast.js.map +1 -1
- package/dist/features/audit.d.ts.map +1 -1
- package/dist/features/audit.js +8 -6
- package/dist/features/audit.js.map +1 -1
- package/dist/features/branch-compare.d.ts.map +1 -1
- package/dist/features/branch-compare.js +69 -72
- package/dist/features/branch-compare.js.map +1 -1
- package/dist/features/communities.d.ts.map +1 -1
- package/dist/features/communities.js +19 -7
- package/dist/features/communities.js.map +1 -1
- package/dist/features/complexity.d.ts.map +1 -1
- package/dist/features/complexity.js +120 -125
- package/dist/features/complexity.js.map +1 -1
- package/dist/features/dataflow.d.ts.map +1 -1
- package/dist/features/dataflow.js +136 -137
- package/dist/features/dataflow.js.map +1 -1
- package/dist/features/flow.d.ts.map +1 -1
- package/dist/features/flow.js +84 -79
- package/dist/features/flow.js.map +1 -1
- package/dist/features/structure-query.d.ts.map +1 -1
- package/dist/features/structure-query.js +69 -65
- package/dist/features/structure-query.js.map +1 -1
- package/dist/graph/algorithms/bfs.d.ts +2 -0
- package/dist/graph/algorithms/bfs.d.ts.map +1 -1
- package/dist/graph/algorithms/bfs.js +27 -0
- package/dist/graph/algorithms/bfs.js.map +1 -1
- package/dist/graph/algorithms/centrality.d.ts +2 -0
- package/dist/graph/algorithms/centrality.d.ts.map +1 -1
- package/dist/graph/algorithms/centrality.js +28 -0
- package/dist/graph/algorithms/centrality.js.map +1 -1
- package/dist/graph/algorithms/leiden/optimiser.d.ts.map +1 -1
- package/dist/graph/algorithms/leiden/optimiser.js +70 -55
- package/dist/graph/algorithms/leiden/optimiser.js.map +1 -1
- package/dist/graph/algorithms/leiden/partition.d.ts.map +1 -1
- package/dist/graph/algorithms/leiden/partition.js +288 -266
- package/dist/graph/algorithms/leiden/partition.js.map +1 -1
- package/dist/graph/algorithms/louvain.d.ts +3 -4
- package/dist/graph/algorithms/louvain.d.ts.map +1 -1
- package/dist/graph/algorithms/louvain.js +29 -0
- package/dist/graph/algorithms/louvain.js.map +1 -1
- package/dist/graph/algorithms/shortest-path.d.ts +2 -0
- package/dist/graph/algorithms/shortest-path.d.ts.map +1 -1
- package/dist/graph/algorithms/shortest-path.js +18 -1
- package/dist/graph/algorithms/shortest-path.js.map +1 -1
- package/dist/graph/model.d.ts.map +1 -1
- package/dist/graph/model.js +5 -1
- package/dist/graph/model.js.map +1 -1
- package/dist/infrastructure/config.d.ts.map +1 -1
- package/dist/infrastructure/config.js +6 -4
- package/dist/infrastructure/config.js.map +1 -1
- package/dist/infrastructure/suppress.d.ts +25 -0
- package/dist/infrastructure/suppress.d.ts.map +1 -0
- package/dist/infrastructure/suppress.js +43 -0
- package/dist/infrastructure/suppress.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +29 -24
- package/dist/mcp/server.js.map +1 -1
- package/dist/presentation/dataflow.d.ts.map +1 -1
- package/dist/presentation/dataflow.js +47 -38
- package/dist/presentation/dataflow.js.map +1 -1
- package/dist/presentation/diff-impact-mermaid.d.ts.map +1 -1
- package/dist/presentation/diff-impact-mermaid.js +60 -51
- package/dist/presentation/diff-impact-mermaid.js.map +1 -1
- package/dist/presentation/queries-cli/exports.d.ts.map +1 -1
- package/dist/presentation/queries-cli/exports.js +20 -14
- package/dist/presentation/queries-cli/exports.js.map +1 -1
- package/dist/presentation/queries-cli/impact.d.ts.map +1 -1
- package/dist/presentation/queries-cli/impact.js +15 -13
- package/dist/presentation/queries-cli/impact.js.map +1 -1
- package/dist/presentation/queries-cli/inspect.d.ts.map +1 -1
- package/dist/presentation/queries-cli/inspect.js +101 -79
- package/dist/presentation/queries-cli/inspect.js.map +1 -1
- package/dist/presentation/queries-cli/overview.d.ts.map +1 -1
- package/dist/presentation/queries-cli/overview.js +25 -16
- package/dist/presentation/queries-cli/overview.js.map +1 -1
- package/dist/presentation/queries-cli/path.js +26 -20
- package/dist/presentation/queries-cli/path.js.map +1 -1
- package/dist/presentation/result-formatter.d.ts +10 -0
- package/dist/presentation/result-formatter.d.ts.map +1 -1
- package/dist/presentation/result-formatter.js +16 -1
- package/dist/presentation/result-formatter.js.map +1 -1
- package/dist/presentation/viewer.d.ts.map +1 -1
- package/dist/presentation/viewer.js +18 -12
- package/dist/presentation/viewer.js.map +1 -1
- package/dist/shared/errors.d.ts +5 -0
- package/dist/shared/errors.d.ts.map +1 -1
- package/dist/shared/errors.js +5 -0
- package/dist/shared/errors.js.map +1 -1
- package/dist/shared/hierarchy.d.ts +8 -2
- package/dist/shared/hierarchy.d.ts.map +1 -1
- package/dist/shared/hierarchy.js +42 -1
- package/dist/shared/hierarchy.js.map +1 -1
- package/dist/shared/normalize.d.ts +6 -1
- package/dist/shared/normalize.d.ts.map +1 -1
- package/dist/shared/normalize.js +20 -12
- package/dist/shared/normalize.js.map +1 -1
- package/dist/shared/paginate.d.ts +0 -9
- package/dist/shared/paginate.d.ts.map +1 -1
- package/dist/shared/paginate.js +0 -15
- package/dist/shared/paginate.js.map +1 -1
- package/dist/types.d.ts +129 -3
- package/dist/types.d.ts.map +1 -1
- package/grammars/tree-sitter-clojure.wasm +0 -0
- package/grammars/tree-sitter-cuda.wasm +0 -0
- package/grammars/tree-sitter-erlang.wasm +0 -0
- package/grammars/tree-sitter-fsharp.wasm +0 -0
- package/grammars/tree-sitter-gleam.wasm +0 -0
- package/grammars/tree-sitter-groovy.wasm +0 -0
- package/grammars/tree-sitter-julia.wasm +0 -0
- package/grammars/tree-sitter-objc.wasm +0 -0
- package/grammars/tree-sitter-ocaml_interface.wasm +0 -0
- package/grammars/tree-sitter-r.wasm +0 -0
- package/grammars/tree-sitter-solidity.wasm +0 -0
- package/grammars/tree-sitter-verilog.wasm +0 -0
- package/package.json +18 -7
- package/src/ast-analysis/engine.ts +245 -42
- package/src/ast-analysis/metrics.ts +33 -11
- package/src/ast-analysis/rules/javascript.ts +0 -1
- package/src/ast-analysis/shared.ts +33 -24
- package/src/ast-analysis/visitor-utils.ts +52 -32
- package/src/ast-analysis/visitor.ts +132 -71
- package/src/ast-analysis/visitors/ast-store-visitor.ts +49 -119
- package/src/ast-analysis/visitors/complexity-visitor.ts +35 -40
- package/src/ast-analysis/visitors/dataflow-visitor.ts +87 -43
- package/src/cli/commands/ast.ts +2 -2
- package/src/cli/commands/watch.ts +16 -2
- package/src/db/connection.ts +29 -28
- package/src/db/query-builder.ts +15 -3
- package/src/db/repository/base.ts +20 -0
- package/src/db/repository/native-repository.ts +79 -1
- package/src/db/repository/nodes.ts +13 -8
- package/src/db/repository/sqlite-repository.ts +29 -0
- package/src/domain/analysis/brief.ts +15 -25
- package/src/domain/analysis/context.ts +17 -10
- package/src/domain/analysis/dependencies.ts +67 -76
- package/src/domain/analysis/fn-impact.ts +36 -43
- package/src/domain/analysis/implementations.ts +11 -17
- package/src/domain/analysis/module-map.ts +58 -92
- package/src/domain/analysis/query-helpers.ts +18 -1
- package/src/domain/graph/builder/pipeline.ts +366 -41
- package/src/domain/graph/builder/stages/build-edges.ts +162 -1
- package/src/domain/graph/builder/stages/collect-files.ts +18 -7
- package/src/domain/graph/builder/stages/detect-changes.ts +110 -56
- package/src/domain/graph/builder/stages/finalize.ts +41 -11
- package/src/domain/graph/builder/stages/insert-nodes.ts +75 -39
- package/src/domain/graph/builder/stages/resolve-imports.ts +122 -100
- package/src/domain/graph/cycles.ts +110 -23
- package/src/domain/graph/resolve.ts +1 -1
- package/src/domain/graph/watcher.ts +202 -96
- package/src/domain/parser.ts +122 -28
- package/src/domain/search/generator.ts +1 -1
- package/src/domain/search/models.ts +17 -4
- package/src/domain/search/search/hybrid.ts +69 -51
- package/src/extractors/clojure.ts +273 -0
- package/src/extractors/cuda.ts +316 -0
- package/src/extractors/erlang.ts +252 -0
- package/src/extractors/fsharp.ts +253 -0
- package/src/extractors/gleam.ts +246 -0
- package/src/extractors/go.ts +43 -33
- package/src/extractors/groovy.ts +332 -0
- package/src/extractors/helpers.ts +37 -23
- package/src/extractors/index.ts +11 -0
- package/src/extractors/java.ts +66 -47
- package/src/extractors/javascript.ts +45 -46
- package/src/extractors/julia.ts +318 -0
- package/src/extractors/kotlin.ts +84 -77
- package/src/extractors/objc.ts +431 -0
- package/src/extractors/ocaml.ts +78 -0
- package/src/extractors/python.ts +31 -25
- package/src/extractors/r.ts +253 -0
- package/src/extractors/rust.ts +37 -29
- package/src/extractors/solidity.ts +394 -0
- package/src/extractors/swift.ts +81 -80
- package/src/extractors/verilog.ts +315 -0
- package/src/extractors/zig.ts +58 -61
- package/src/features/ast.ts +131 -112
- package/src/features/audit.ts +8 -6
- package/src/features/branch-compare.ts +105 -79
- package/src/features/communities.ts +25 -10
- package/src/features/complexity.ts +171 -134
- package/src/features/dataflow.ts +165 -175
- package/src/features/flow.ts +129 -92
- package/src/features/structure-query.ts +79 -64
- package/src/graph/algorithms/bfs.ts +34 -0
- package/src/graph/algorithms/centrality.ts +30 -0
- package/src/graph/algorithms/leiden/optimiser.ts +99 -55
- package/src/graph/algorithms/leiden/partition.ts +359 -294
- package/src/graph/algorithms/louvain.ts +31 -4
- package/src/graph/algorithms/shortest-path.ts +20 -1
- package/src/graph/model.ts +6 -1
- package/src/infrastructure/config.ts +6 -4
- package/src/infrastructure/suppress.ts +47 -0
- package/src/mcp/server.ts +53 -37
- package/src/presentation/dataflow.ts +50 -44
- package/src/presentation/diff-impact-mermaid.ts +104 -62
- package/src/presentation/queries-cli/exports.ts +21 -13
- package/src/presentation/queries-cli/impact.ts +15 -13
- package/src/presentation/queries-cli/inspect.ts +100 -81
- package/src/presentation/queries-cli/overview.ts +26 -16
- package/src/presentation/queries-cli/path.ts +33 -25
- package/src/presentation/result-formatter.ts +19 -1
- package/src/presentation/viewer.ts +42 -14
- package/src/shared/errors.ts +6 -0
- package/src/shared/hierarchy.ts +50 -2
- package/src/shared/normalize.ts +31 -12
- package/src/shared/paginate.ts +0 -17
- package/src/types.ts +138 -3
package/src/shared/normalize.ts
CHANGED
|
@@ -3,6 +3,15 @@ interface DbHandle {
|
|
|
3
3
|
prepare(sql: string): { get(...params: unknown[]): unknown };
|
|
4
4
|
}
|
|
5
5
|
|
|
6
|
+
/** Anything that can look up a file hash — either a raw DB or a Repository. */
|
|
7
|
+
interface HashSource {
|
|
8
|
+
getFileHash(file: string): string | null;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function isHashSource(x: unknown): x is HashSource {
|
|
12
|
+
return typeof x === 'object' && x !== null && typeof (x as HashSource).getFileHash === 'function';
|
|
13
|
+
}
|
|
14
|
+
|
|
6
15
|
export function getFileHash(db: DbHandle, file: string): string | null {
|
|
7
16
|
const row = db.prepare('SELECT hash FROM file_hashes WHERE file = ?').get(file) as
|
|
8
17
|
| { hash: string }
|
|
@@ -55,25 +64,35 @@ interface RawSymbolRow {
|
|
|
55
64
|
role?: string | null;
|
|
56
65
|
}
|
|
57
66
|
|
|
67
|
+
/**
|
|
68
|
+
* Resolve a file hash, using the cache when available.
|
|
69
|
+
* Accepts a raw DB handle (with .prepare) or a Repository (with .getFileHash).
|
|
70
|
+
*/
|
|
71
|
+
function resolveFileHash(
|
|
72
|
+
db: DbHandle | HashSource,
|
|
73
|
+
file: string,
|
|
74
|
+
hashCache?: Map<string, string | null>,
|
|
75
|
+
): string | null {
|
|
76
|
+
const lookupHash = isHashSource(db)
|
|
77
|
+
? (f: string) => db.getFileHash(f)
|
|
78
|
+
: (f: string) => getFileHash(db as DbHandle, f);
|
|
79
|
+
if (!hashCache) return lookupHash(file);
|
|
80
|
+
if (!hashCache.has(file)) {
|
|
81
|
+
hashCache.set(file, lookupHash(file));
|
|
82
|
+
}
|
|
83
|
+
return hashCache.get(file) ?? null;
|
|
84
|
+
}
|
|
85
|
+
|
|
58
86
|
/**
|
|
59
87
|
* Normalize a raw DB/query row into the stable 7-field symbol shape.
|
|
88
|
+
* Accepts a raw DB handle (with .prepare), a Repository (with .getFileHash), or null.
|
|
60
89
|
*/
|
|
61
90
|
export function normalizeSymbol(
|
|
62
91
|
row: RawSymbolRow,
|
|
63
|
-
db?: DbHandle | null,
|
|
92
|
+
db?: DbHandle | HashSource | null,
|
|
64
93
|
hashCache?: Map<string, string | null>,
|
|
65
94
|
): NormalizedSymbol {
|
|
66
|
-
|
|
67
|
-
if (db) {
|
|
68
|
-
if (hashCache) {
|
|
69
|
-
if (!hashCache.has(row.file)) {
|
|
70
|
-
hashCache.set(row.file, getFileHash(db, row.file));
|
|
71
|
-
}
|
|
72
|
-
fileHash = hashCache.get(row.file) ?? null;
|
|
73
|
-
} else {
|
|
74
|
-
fileHash = getFileHash(db, row.file);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
95
|
+
const fileHash = db ? resolveFileHash(db, row.file, hashCache) : null;
|
|
77
96
|
return {
|
|
78
97
|
name: row.name,
|
|
79
98
|
kind: row.kind,
|
package/src/shared/paginate.ts
CHANGED
|
@@ -105,20 +105,3 @@ export function paginateResult<T extends Record<string, unknown>>(
|
|
|
105
105
|
const { items, pagination } = paginate(arr, { limit, offset });
|
|
106
106
|
return { ...result, [field]: items, _pagination: pagination };
|
|
107
107
|
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* Print data as newline-delimited JSON (NDJSON).
|
|
111
|
-
*
|
|
112
|
-
* Emits a `_meta` line with pagination info (if present), then one JSON
|
|
113
|
-
* line per item in the named array field.
|
|
114
|
-
*/
|
|
115
|
-
export function printNdjson(
|
|
116
|
-
data: Record<string, unknown> & { _pagination?: PaginationMeta },
|
|
117
|
-
field: string,
|
|
118
|
-
): void {
|
|
119
|
-
if (data._pagination) console.log(JSON.stringify({ _meta: data._pagination }));
|
|
120
|
-
const items = data[field];
|
|
121
|
-
if (Array.isArray(items)) {
|
|
122
|
-
for (const item of items) console.log(JSON.stringify(item));
|
|
123
|
-
}
|
|
124
|
-
}
|
package/src/types.ts
CHANGED
|
@@ -61,7 +61,7 @@ export type EdgeKind = CoreEdgeKind | StructuralEdgeKind;
|
|
|
61
61
|
export type AnyEdgeKind = EdgeKind | DataflowEdgeKind;
|
|
62
62
|
|
|
63
63
|
/** AST node kinds extracted during analysis. */
|
|
64
|
-
export type ASTNodeKind = '
|
|
64
|
+
export type ASTNodeKind = 'new' | 'string' | 'regex' | 'throw' | 'await';
|
|
65
65
|
|
|
66
66
|
/** Coarse role classifications for symbols based on connectivity. */
|
|
67
67
|
export type CoreRole = 'entry' | 'core' | 'utility' | 'adapter' | 'dead' | 'test-only' | 'leaf';
|
|
@@ -96,7 +96,19 @@ export type LanguageId =
|
|
|
96
96
|
| 'dart'
|
|
97
97
|
| 'zig'
|
|
98
98
|
| 'haskell'
|
|
99
|
-
| 'ocaml'
|
|
99
|
+
| 'ocaml'
|
|
100
|
+
| 'ocaml-interface'
|
|
101
|
+
| 'fsharp'
|
|
102
|
+
| 'gleam'
|
|
103
|
+
| 'clojure'
|
|
104
|
+
| 'julia'
|
|
105
|
+
| 'r'
|
|
106
|
+
| 'erlang'
|
|
107
|
+
| 'solidity'
|
|
108
|
+
| 'objc'
|
|
109
|
+
| 'cuda'
|
|
110
|
+
| 'groovy'
|
|
111
|
+
| 'verilog';
|
|
100
112
|
|
|
101
113
|
/** Engine mode selector. */
|
|
102
114
|
export type EngineMode = 'native' | 'wasm' | 'auto';
|
|
@@ -316,6 +328,11 @@ export interface Repository {
|
|
|
316
328
|
hasEmbeddings(): boolean;
|
|
317
329
|
hasDataflowTable(): boolean;
|
|
318
330
|
getComplexityForNode(nodeId: number): ComplexityMetrics | undefined;
|
|
331
|
+
|
|
332
|
+
// ── Convenience queries ──────────────────────────────────────────
|
|
333
|
+
getFileHash(file: string): string | null;
|
|
334
|
+
hasImplementsEdges(): boolean;
|
|
335
|
+
hasCoChangesTable(): boolean;
|
|
319
336
|
}
|
|
320
337
|
|
|
321
338
|
/**
|
|
@@ -383,6 +400,7 @@ export interface SubDeclaration {
|
|
|
383
400
|
line: number;
|
|
384
401
|
endLine?: number;
|
|
385
402
|
visibility?: 'public' | 'private' | 'protected';
|
|
403
|
+
decorators?: string[];
|
|
386
404
|
}
|
|
387
405
|
|
|
388
406
|
/** Complexity metrics attached to a definition post-analysis. */
|
|
@@ -1828,8 +1846,54 @@ export interface NativeAddon {
|
|
|
1828
1846
|
): Array<{ fromFile: string; importSource: string; resolvedPath: string }>;
|
|
1829
1847
|
computeConfidence(callerFile: string, targetFile: string, importedFrom: string | null): number;
|
|
1830
1848
|
detectCycles(edges: Array<{ source: string; target: string }>): string[][];
|
|
1849
|
+
bfsTraversal(
|
|
1850
|
+
edges: Array<{ source: string; target: string }>,
|
|
1851
|
+
startIds: string[],
|
|
1852
|
+
maxDepth?: number | null,
|
|
1853
|
+
direction?: string | null,
|
|
1854
|
+
): Array<{ node: string; depth: number }>;
|
|
1855
|
+
shortestPath(
|
|
1856
|
+
edges: Array<{ source: string; target: string }>,
|
|
1857
|
+
fromId: string,
|
|
1858
|
+
toId: string,
|
|
1859
|
+
): string[];
|
|
1860
|
+
fanInOut(
|
|
1861
|
+
edges: Array<{ source: string; target: string }>,
|
|
1862
|
+
): Array<{ node: string; fanIn: number; fanOut: number }>;
|
|
1863
|
+
louvainCommunities(
|
|
1864
|
+
edges: Array<{ source: string; target: string }>,
|
|
1865
|
+
nodeIds: string[],
|
|
1866
|
+
resolution?: number | null,
|
|
1867
|
+
randomSeed?: number | null,
|
|
1868
|
+
): {
|
|
1869
|
+
assignments: Array<{ node: string; community: number }>;
|
|
1870
|
+
modularity: number;
|
|
1871
|
+
};
|
|
1831
1872
|
buildCallEdges(files: unknown[], nodes: unknown[], builtinReceivers: string[]): unknown[];
|
|
1873
|
+
buildImportEdges?(
|
|
1874
|
+
files: unknown[],
|
|
1875
|
+
resolvedImports: unknown[],
|
|
1876
|
+
fileReexports: unknown[],
|
|
1877
|
+
fileNodeIds: unknown[],
|
|
1878
|
+
barrelFiles: string[],
|
|
1879
|
+
rootDir: string,
|
|
1880
|
+
): unknown[];
|
|
1832
1881
|
engineVersion(): string;
|
|
1882
|
+
analyzeComplexity(
|
|
1883
|
+
source: string,
|
|
1884
|
+
filePath: string,
|
|
1885
|
+
langId?: string | null,
|
|
1886
|
+
): NativeFunctionComplexityResult[];
|
|
1887
|
+
buildCfgAnalysis(
|
|
1888
|
+
source: string,
|
|
1889
|
+
filePath: string,
|
|
1890
|
+
langId?: string | null,
|
|
1891
|
+
): NativeFunctionCfgResult[];
|
|
1892
|
+
extractDataflowAnalysis(
|
|
1893
|
+
source: string,
|
|
1894
|
+
filePath: string,
|
|
1895
|
+
langId?: string | null,
|
|
1896
|
+
): DataflowResult | null;
|
|
1833
1897
|
ParseTreeCache: new () => NativeParseTreeCache;
|
|
1834
1898
|
NativeDatabase: {
|
|
1835
1899
|
openReadWrite(dbPath: string): NativeDatabase;
|
|
@@ -1837,6 +1901,40 @@ export interface NativeAddon {
|
|
|
1837
1901
|
};
|
|
1838
1902
|
}
|
|
1839
1903
|
|
|
1904
|
+
/** Per-function complexity result from native standalone analysis (napi output shape). */
|
|
1905
|
+
export interface NativeFunctionComplexityResult {
|
|
1906
|
+
name: string;
|
|
1907
|
+
line: number;
|
|
1908
|
+
endLine: number | null;
|
|
1909
|
+
complexity: {
|
|
1910
|
+
cognitive: number;
|
|
1911
|
+
cyclomatic: number;
|
|
1912
|
+
maxNesting: number;
|
|
1913
|
+
halstead?: {
|
|
1914
|
+
n1: number;
|
|
1915
|
+
n2: number;
|
|
1916
|
+
bigN1: number;
|
|
1917
|
+
bigN2: number;
|
|
1918
|
+
vocabulary: number;
|
|
1919
|
+
length: number;
|
|
1920
|
+
volume: number;
|
|
1921
|
+
difficulty: number;
|
|
1922
|
+
effort: number;
|
|
1923
|
+
bugs: number;
|
|
1924
|
+
};
|
|
1925
|
+
loc?: { loc: number; sloc: number; commentLines: number };
|
|
1926
|
+
maintainabilityIndex?: number | null;
|
|
1927
|
+
};
|
|
1928
|
+
}
|
|
1929
|
+
|
|
1930
|
+
/** Per-function CFG result from native standalone analysis. */
|
|
1931
|
+
export interface NativeFunctionCfgResult {
|
|
1932
|
+
name: string;
|
|
1933
|
+
line: number;
|
|
1934
|
+
endLine: number | null;
|
|
1935
|
+
cfg: { blocks: CfgBlock[]; edges: CfgEdge[] };
|
|
1936
|
+
}
|
|
1937
|
+
|
|
1840
1938
|
/** Native parse-tree cache instance. */
|
|
1841
1939
|
export interface NativeParseTreeCache {
|
|
1842
1940
|
get(filePath: string): unknown;
|
|
@@ -2029,7 +2127,10 @@ export interface NativeDatabase {
|
|
|
2029
2127
|
hasCfgTables(): boolean;
|
|
2030
2128
|
hasEmbeddings(): boolean;
|
|
2031
2129
|
hasDataflowTable(): boolean;
|
|
2130
|
+
hasImplementsEdges(): boolean;
|
|
2131
|
+
hasCoChangesTable(): boolean;
|
|
2032
2132
|
getComplexityForNode(nodeId: number): NativeComplexityMetrics | null;
|
|
2133
|
+
getFileHash(file: string): string | null;
|
|
2033
2134
|
|
|
2034
2135
|
// ── Build pipeline writes (6.15) ───────────────────────────────────
|
|
2035
2136
|
bulkInsertNodes(
|
|
@@ -2119,7 +2220,7 @@ export interface NativeDatabase {
|
|
|
2119
2220
|
sourceId: number;
|
|
2120
2221
|
targetId: number;
|
|
2121
2222
|
kind: string;
|
|
2122
|
-
paramIndex?: number
|
|
2223
|
+
paramIndex?: number;
|
|
2123
2224
|
expression?: string | null;
|
|
2124
2225
|
line?: number | null;
|
|
2125
2226
|
confidence: number;
|
|
@@ -2266,6 +2367,32 @@ export interface NativeDatabase {
|
|
|
2266
2367
|
fanOut: number;
|
|
2267
2368
|
}>;
|
|
2268
2369
|
|
|
2370
|
+
// ── Batched build-glue queries (6.18) ────────────────────────────────
|
|
2371
|
+
/** All file_hashes rows + table existence + max mtime in one call. */
|
|
2372
|
+
getFileHashData?(): {
|
|
2373
|
+
exists: boolean;
|
|
2374
|
+
rows: Array<{ file: string; hash: string; mtime: number; size: number }>;
|
|
2375
|
+
maxMtime: number;
|
|
2376
|
+
};
|
|
2377
|
+
/** CFG and dataflow table counts (-1 = table missing). */
|
|
2378
|
+
checkPendingAnalysis?(): { cfgCount: number; dataflowCount: number };
|
|
2379
|
+
/** Batch upsert file_hashes for metadata healing. */
|
|
2380
|
+
healFileMetadata?(
|
|
2381
|
+
entries: Array<{ file: string; hash: string; mtime: number; size: number }>,
|
|
2382
|
+
): number;
|
|
2383
|
+
/** Find files with edges pointing to changed files. */
|
|
2384
|
+
findReverseDependencies?(changedFiles: string[]): string[];
|
|
2385
|
+
/** Node + edge counts in one call. */
|
|
2386
|
+
getFinalizeCounts?(): { nodeCount: number; edgeCount: number };
|
|
2387
|
+
/** Orphaned embeddings, stale embeddings, unused exports in one call. */
|
|
2388
|
+
runAdvisoryChecks?(hasEmbeddings: boolean): {
|
|
2389
|
+
orphanedEmbeddings: number;
|
|
2390
|
+
embedBuiltAt: string | null;
|
|
2391
|
+
unusedExports: number;
|
|
2392
|
+
};
|
|
2393
|
+
/** File_hashes count + all file paths in one call. */
|
|
2394
|
+
getCollectFilesData?(): { count: number; files: string[] };
|
|
2395
|
+
|
|
2269
2396
|
// ── Generic query execution & version validation (6.16) ─────────────
|
|
2270
2397
|
/** Execute a parameterized SELECT and return all rows as objects. */
|
|
2271
2398
|
queryAll(sql: string, params: Array<string | number | null>): Record<string, unknown>[];
|
|
@@ -2273,6 +2400,14 @@ export interface NativeDatabase {
|
|
|
2273
2400
|
queryGet(sql: string, params: Array<string | number | null>): Record<string, unknown> | null;
|
|
2274
2401
|
/** Validate DB codegraph_version matches expected. Warns on mismatch. */
|
|
2275
2402
|
validateSchemaVersion(expectedVersion: string): boolean;
|
|
2403
|
+
|
|
2404
|
+
// ── Full Rust build orchestration (#695) ─────────────────────────────
|
|
2405
|
+
/**
|
|
2406
|
+
* Run the entire build pipeline in Rust with zero napi boundary crossings.
|
|
2407
|
+
* Returns a JSON string with timing and build result data.
|
|
2408
|
+
* When unavailable, the JS pipeline (runPipelineStages) is used as fallback.
|
|
2409
|
+
*/
|
|
2410
|
+
buildGraph?(rootDir: string, configJson: string, aliasesJson: string, optsJson: string): string;
|
|
2276
2411
|
}
|
|
2277
2412
|
|
|
2278
2413
|
// ════════════════════════════════════════════════════════════════════════
|