@colbymchenry/codegraph 0.8.0 → 0.9.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 +23 -7
- package/npm-shim.js +43 -0
- package/package.json +13 -51
- package/LICENSE +0 -21
- package/dist/bin/codegraph.d.ts +0 -21
- package/dist/bin/codegraph.d.ts.map +0 -1
- package/dist/bin/codegraph.js +0 -1257
- package/dist/bin/codegraph.js.map +0 -1
- package/dist/bin/node-version-check.d.ts +0 -20
- package/dist/bin/node-version-check.d.ts.map +0 -1
- package/dist/bin/node-version-check.js +0 -42
- package/dist/bin/node-version-check.js.map +0 -1
- package/dist/bin/uninstall.d.ts +0 -14
- package/dist/bin/uninstall.d.ts.map +0 -1
- package/dist/bin/uninstall.js +0 -36
- package/dist/bin/uninstall.js.map +0 -1
- package/dist/config.d.ts +0 -51
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -321
- package/dist/config.js.map +0 -1
- package/dist/context/formatter.d.ts +0 -30
- package/dist/context/formatter.d.ts.map +0 -1
- package/dist/context/formatter.js +0 -244
- package/dist/context/formatter.js.map +0 -1
- package/dist/context/index.d.ts +0 -97
- package/dist/context/index.d.ts.map +0 -1
- package/dist/context/index.js +0 -1050
- package/dist/context/index.js.map +0 -1
- package/dist/db/index.d.ts +0 -72
- package/dist/db/index.d.ts.map +0 -1
- package/dist/db/index.js +0 -200
- package/dist/db/index.js.map +0 -1
- package/dist/db/migrations.d.ts +0 -44
- package/dist/db/migrations.d.ts.map +0 -1
- package/dist/db/migrations.js +0 -131
- package/dist/db/migrations.js.map +0 -1
- package/dist/db/queries.d.ts +0 -253
- package/dist/db/queries.d.ts.map +0 -1
- package/dist/db/queries.js +0 -1207
- package/dist/db/queries.js.map +0 -1
- package/dist/db/schema.sql +0 -151
- package/dist/db/sqlite-adapter.d.ts +0 -52
- package/dist/db/sqlite-adapter.d.ts.map +0 -1
- package/dist/db/sqlite-adapter.js +0 -237
- package/dist/db/sqlite-adapter.js.map +0 -1
- package/dist/directory.d.ts +0 -57
- package/dist/directory.d.ts.map +0 -1
- package/dist/directory.js +0 -264
- package/dist/directory.js.map +0 -1
- package/dist/errors.d.ts +0 -136
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js +0 -219
- package/dist/errors.js.map +0 -1
- package/dist/extraction/dfm-extractor.d.ts +0 -31
- package/dist/extraction/dfm-extractor.d.ts.map +0 -1
- package/dist/extraction/dfm-extractor.js +0 -151
- package/dist/extraction/dfm-extractor.js.map +0 -1
- package/dist/extraction/grammars.d.ts +0 -78
- package/dist/extraction/grammars.d.ts.map +0 -1
- package/dist/extraction/grammars.js +0 -322
- package/dist/extraction/grammars.js.map +0 -1
- package/dist/extraction/index.d.ts +0 -130
- package/dist/extraction/index.d.ts.map +0 -1
- package/dist/extraction/index.js +0 -1305
- package/dist/extraction/index.js.map +0 -1
- package/dist/extraction/languages/c-cpp.d.ts +0 -4
- package/dist/extraction/languages/c-cpp.d.ts.map +0 -1
- package/dist/extraction/languages/c-cpp.js +0 -126
- package/dist/extraction/languages/c-cpp.js.map +0 -1
- package/dist/extraction/languages/csharp.d.ts +0 -3
- package/dist/extraction/languages/csharp.d.ts.map +0 -1
- package/dist/extraction/languages/csharp.js +0 -72
- package/dist/extraction/languages/csharp.js.map +0 -1
- package/dist/extraction/languages/dart.d.ts +0 -3
- package/dist/extraction/languages/dart.d.ts.map +0 -1
- package/dist/extraction/languages/dart.js +0 -192
- package/dist/extraction/languages/dart.js.map +0 -1
- package/dist/extraction/languages/go.d.ts +0 -3
- package/dist/extraction/languages/go.d.ts.map +0 -1
- package/dist/extraction/languages/go.js +0 -58
- package/dist/extraction/languages/go.js.map +0 -1
- package/dist/extraction/languages/index.d.ts +0 -10
- package/dist/extraction/languages/index.d.ts.map +0 -1
- package/dist/extraction/languages/index.js +0 -45
- package/dist/extraction/languages/index.js.map +0 -1
- package/dist/extraction/languages/java.d.ts +0 -3
- package/dist/extraction/languages/java.d.ts.map +0 -1
- package/dist/extraction/languages/java.js +0 -64
- package/dist/extraction/languages/java.js.map +0 -1
- package/dist/extraction/languages/javascript.d.ts +0 -3
- package/dist/extraction/languages/javascript.d.ts.map +0 -1
- package/dist/extraction/languages/javascript.js +0 -90
- package/dist/extraction/languages/javascript.js.map +0 -1
- package/dist/extraction/languages/kotlin.d.ts +0 -3
- package/dist/extraction/languages/kotlin.d.ts.map +0 -1
- package/dist/extraction/languages/kotlin.js +0 -253
- package/dist/extraction/languages/kotlin.js.map +0 -1
- package/dist/extraction/languages/pascal.d.ts +0 -3
- package/dist/extraction/languages/pascal.d.ts.map +0 -1
- package/dist/extraction/languages/pascal.js +0 -66
- package/dist/extraction/languages/pascal.js.map +0 -1
- package/dist/extraction/languages/php.d.ts +0 -3
- package/dist/extraction/languages/php.d.ts.map +0 -1
- package/dist/extraction/languages/php.js +0 -107
- package/dist/extraction/languages/php.js.map +0 -1
- package/dist/extraction/languages/python.d.ts +0 -3
- package/dist/extraction/languages/python.d.ts.map +0 -1
- package/dist/extraction/languages/python.js +0 -56
- package/dist/extraction/languages/python.js.map +0 -1
- package/dist/extraction/languages/ruby.d.ts +0 -3
- package/dist/extraction/languages/ruby.d.ts.map +0 -1
- package/dist/extraction/languages/ruby.js +0 -114
- package/dist/extraction/languages/ruby.js.map +0 -1
- package/dist/extraction/languages/rust.d.ts +0 -3
- package/dist/extraction/languages/rust.d.ts.map +0 -1
- package/dist/extraction/languages/rust.js +0 -109
- package/dist/extraction/languages/rust.js.map +0 -1
- package/dist/extraction/languages/scala.d.ts +0 -3
- package/dist/extraction/languages/scala.d.ts.map +0 -1
- package/dist/extraction/languages/scala.js +0 -139
- package/dist/extraction/languages/scala.js.map +0 -1
- package/dist/extraction/languages/swift.d.ts +0 -3
- package/dist/extraction/languages/swift.d.ts.map +0 -1
- package/dist/extraction/languages/swift.js +0 -91
- package/dist/extraction/languages/swift.js.map +0 -1
- package/dist/extraction/languages/typescript.d.ts +0 -3
- package/dist/extraction/languages/typescript.d.ts.map +0 -1
- package/dist/extraction/languages/typescript.js +0 -129
- package/dist/extraction/languages/typescript.js.map +0 -1
- package/dist/extraction/liquid-extractor.d.ts +0 -52
- package/dist/extraction/liquid-extractor.d.ts.map +0 -1
- package/dist/extraction/liquid-extractor.js +0 -313
- package/dist/extraction/liquid-extractor.js.map +0 -1
- package/dist/extraction/parse-worker.d.ts +0 -8
- package/dist/extraction/parse-worker.d.ts.map +0 -1
- package/dist/extraction/parse-worker.js +0 -94
- package/dist/extraction/parse-worker.js.map +0 -1
- package/dist/extraction/svelte-extractor.d.ts +0 -56
- package/dist/extraction/svelte-extractor.d.ts.map +0 -1
- package/dist/extraction/svelte-extractor.js +0 -272
- package/dist/extraction/svelte-extractor.js.map +0 -1
- package/dist/extraction/tree-sitter-helpers.d.ts +0 -28
- package/dist/extraction/tree-sitter-helpers.d.ts.map +0 -1
- package/dist/extraction/tree-sitter-helpers.js +0 -103
- package/dist/extraction/tree-sitter-helpers.js.map +0 -1
- package/dist/extraction/tree-sitter-types.d.ts +0 -179
- package/dist/extraction/tree-sitter-types.d.ts.map +0 -1
- package/dist/extraction/tree-sitter-types.js +0 -10
- package/dist/extraction/tree-sitter-types.js.map +0 -1
- package/dist/extraction/tree-sitter.d.ts +0 -233
- package/dist/extraction/tree-sitter.d.ts.map +0 -1
- package/dist/extraction/tree-sitter.js +0 -2393
- package/dist/extraction/tree-sitter.js.map +0 -1
- package/dist/extraction/vue-extractor.d.ts +0 -36
- package/dist/extraction/vue-extractor.d.ts.map +0 -1
- package/dist/extraction/vue-extractor.js +0 -163
- package/dist/extraction/vue-extractor.js.map +0 -1
- package/dist/extraction/wasm/tree-sitter-pascal.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-scala.wasm +0 -0
- package/dist/graph/index.d.ts +0 -8
- package/dist/graph/index.d.ts.map +0 -1
- package/dist/graph/index.js +0 -13
- package/dist/graph/index.js.map +0 -1
- package/dist/graph/queries.d.ts +0 -106
- package/dist/graph/queries.d.ts.map +0 -1
- package/dist/graph/queries.js +0 -366
- package/dist/graph/queries.js.map +0 -1
- package/dist/graph/traversal.d.ts +0 -127
- package/dist/graph/traversal.d.ts.map +0 -1
- package/dist/graph/traversal.js +0 -493
- package/dist/graph/traversal.js.map +0 -1
- package/dist/index.d.ts +0 -447
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -825
- package/dist/index.js.map +0 -1
- package/dist/installer/claude-md-template.d.ts +0 -14
- package/dist/installer/claude-md-template.d.ts.map +0 -1
- package/dist/installer/claude-md-template.js +0 -21
- package/dist/installer/claude-md-template.js.map +0 -1
- package/dist/installer/config-writer.d.ts +0 -29
- package/dist/installer/config-writer.d.ts.map +0 -1
- package/dist/installer/config-writer.js +0 -111
- package/dist/installer/config-writer.js.map +0 -1
- package/dist/installer/index.d.ts +0 -65
- package/dist/installer/index.d.ts.map +0 -1
- package/dist/installer/index.js +0 -406
- package/dist/installer/index.js.map +0 -1
- package/dist/installer/instructions-template.d.ts +0 -28
- package/dist/installer/instructions-template.d.ts.map +0 -1
- package/dist/installer/instructions-template.js +0 -64
- package/dist/installer/instructions-template.js.map +0 -1
- package/dist/installer/targets/claude.d.ts +0 -31
- package/dist/installer/targets/claude.d.ts.map +0 -1
- package/dist/installer/targets/claude.js +0 -308
- package/dist/installer/targets/claude.js.map +0 -1
- package/dist/installer/targets/codex.d.ts +0 -18
- package/dist/installer/targets/codex.d.ts.map +0 -1
- package/dist/installer/targets/codex.js +0 -185
- package/dist/installer/targets/codex.js.map +0 -1
- package/dist/installer/targets/cursor.d.ts +0 -35
- package/dist/installer/targets/cursor.d.ts.map +0 -1
- package/dist/installer/targets/cursor.js +0 -229
- package/dist/installer/targets/cursor.js.map +0 -1
- package/dist/installer/targets/opencode.d.ts +0 -30
- package/dist/installer/targets/opencode.d.ts.map +0 -1
- package/dist/installer/targets/opencode.js +0 -235
- package/dist/installer/targets/opencode.js.map +0 -1
- package/dist/installer/targets/registry.d.ts +0 -35
- package/dist/installer/targets/registry.d.ts.map +0 -1
- package/dist/installer/targets/registry.js +0 -83
- package/dist/installer/targets/registry.js.map +0 -1
- package/dist/installer/targets/shared.d.ts +0 -77
- package/dist/installer/targets/shared.d.ts.map +0 -1
- package/dist/installer/targets/shared.js +0 -246
- package/dist/installer/targets/shared.js.map +0 -1
- package/dist/installer/targets/toml.d.ts +0 -52
- package/dist/installer/targets/toml.d.ts.map +0 -1
- package/dist/installer/targets/toml.js +0 -147
- package/dist/installer/targets/toml.js.map +0 -1
- package/dist/installer/targets/types.d.ts +0 -116
- package/dist/installer/targets/types.d.ts.map +0 -1
- package/dist/installer/targets/types.js +0 -16
- package/dist/installer/targets/types.js.map +0 -1
- package/dist/mcp/index.d.ts +0 -94
- package/dist/mcp/index.d.ts.map +0 -1
- package/dist/mcp/index.js +0 -453
- package/dist/mcp/index.js.map +0 -1
- package/dist/mcp/server-instructions.d.ts +0 -19
- package/dist/mcp/server-instructions.d.ts.map +0 -1
- package/dist/mcp/server-instructions.js +0 -71
- package/dist/mcp/server-instructions.js.map +0 -1
- package/dist/mcp/tools.d.ts +0 -257
- package/dist/mcp/tools.d.ts.map +0 -1
- package/dist/mcp/tools.js +0 -1633
- package/dist/mcp/tools.js.map +0 -1
- package/dist/mcp/transport.d.ts +0 -106
- package/dist/mcp/transport.d.ts.map +0 -1
- package/dist/mcp/transport.js +0 -233
- package/dist/mcp/transport.js.map +0 -1
- package/dist/resolution/frameworks/cargo-workspace.d.ts +0 -18
- package/dist/resolution/frameworks/cargo-workspace.d.ts.map +0 -1
- package/dist/resolution/frameworks/cargo-workspace.js +0 -225
- package/dist/resolution/frameworks/cargo-workspace.js.map +0 -1
- package/dist/resolution/frameworks/csharp.d.ts +0 -8
- package/dist/resolution/frameworks/csharp.d.ts.map +0 -1
- package/dist/resolution/frameworks/csharp.js +0 -213
- package/dist/resolution/frameworks/csharp.js.map +0 -1
- package/dist/resolution/frameworks/express.d.ts +0 -8
- package/dist/resolution/frameworks/express.d.ts.map +0 -1
- package/dist/resolution/frameworks/express.js +0 -225
- package/dist/resolution/frameworks/express.js.map +0 -1
- package/dist/resolution/frameworks/go.d.ts +0 -8
- package/dist/resolution/frameworks/go.d.ts.map +0 -1
- package/dist/resolution/frameworks/go.js +0 -158
- package/dist/resolution/frameworks/go.js.map +0 -1
- package/dist/resolution/frameworks/index.d.ts +0 -42
- package/dist/resolution/frameworks/index.d.ts.map +0 -1
- package/dist/resolution/frameworks/index.js +0 -133
- package/dist/resolution/frameworks/index.js.map +0 -1
- package/dist/resolution/frameworks/java.d.ts +0 -8
- package/dist/resolution/frameworks/java.d.ts.map +0 -1
- package/dist/resolution/frameworks/java.js +0 -177
- package/dist/resolution/frameworks/java.js.map +0 -1
- package/dist/resolution/frameworks/laravel.d.ts +0 -13
- package/dist/resolution/frameworks/laravel.d.ts.map +0 -1
- package/dist/resolution/frameworks/laravel.js +0 -248
- package/dist/resolution/frameworks/laravel.js.map +0 -1
- package/dist/resolution/frameworks/nestjs.d.ts +0 -26
- package/dist/resolution/frameworks/nestjs.d.ts.map +0 -1
- package/dist/resolution/frameworks/nestjs.js +0 -374
- package/dist/resolution/frameworks/nestjs.js.map +0 -1
- package/dist/resolution/frameworks/python.d.ts +0 -10
- package/dist/resolution/frameworks/python.d.ts.map +0 -1
- package/dist/resolution/frameworks/python.js +0 -278
- package/dist/resolution/frameworks/python.js.map +0 -1
- package/dist/resolution/frameworks/react.d.ts +0 -8
- package/dist/resolution/frameworks/react.d.ts.map +0 -1
- package/dist/resolution/frameworks/react.js +0 -272
- package/dist/resolution/frameworks/react.js.map +0 -1
- package/dist/resolution/frameworks/ruby.d.ts +0 -8
- package/dist/resolution/frameworks/ruby.d.ts.map +0 -1
- package/dist/resolution/frameworks/ruby.js +0 -198
- package/dist/resolution/frameworks/ruby.js.map +0 -1
- package/dist/resolution/frameworks/rust.d.ts +0 -8
- package/dist/resolution/frameworks/rust.d.ts.map +0 -1
- package/dist/resolution/frameworks/rust.js +0 -207
- package/dist/resolution/frameworks/rust.js.map +0 -1
- package/dist/resolution/frameworks/svelte.d.ts +0 -9
- package/dist/resolution/frameworks/svelte.d.ts.map +0 -1
- package/dist/resolution/frameworks/svelte.js +0 -249
- package/dist/resolution/frameworks/svelte.js.map +0 -1
- package/dist/resolution/frameworks/swift.d.ts +0 -10
- package/dist/resolution/frameworks/swift.d.ts.map +0 -1
- package/dist/resolution/frameworks/swift.js +0 -376
- package/dist/resolution/frameworks/swift.js.map +0 -1
- package/dist/resolution/frameworks/vue.d.ts +0 -9
- package/dist/resolution/frameworks/vue.d.ts.map +0 -1
- package/dist/resolution/frameworks/vue.js +0 -306
- package/dist/resolution/frameworks/vue.js.map +0 -1
- package/dist/resolution/import-resolver.d.ts +0 -40
- package/dist/resolution/import-resolver.d.ts.map +0 -1
- package/dist/resolution/import-resolver.js +0 -663
- package/dist/resolution/import-resolver.js.map +0 -1
- package/dist/resolution/index.d.ts +0 -106
- package/dist/resolution/index.d.ts.map +0 -1
- package/dist/resolution/index.js +0 -709
- package/dist/resolution/index.js.map +0 -1
- package/dist/resolution/name-matcher.d.ts +0 -32
- package/dist/resolution/name-matcher.d.ts.map +0 -1
- package/dist/resolution/name-matcher.js +0 -384
- package/dist/resolution/name-matcher.js.map +0 -1
- package/dist/resolution/path-aliases.d.ts +0 -68
- package/dist/resolution/path-aliases.d.ts.map +0 -1
- package/dist/resolution/path-aliases.js +0 -238
- package/dist/resolution/path-aliases.js.map +0 -1
- package/dist/resolution/strip-comments.d.ts +0 -27
- package/dist/resolution/strip-comments.d.ts.map +0 -1
- package/dist/resolution/strip-comments.js +0 -441
- package/dist/resolution/strip-comments.js.map +0 -1
- package/dist/resolution/types.d.ts +0 -172
- package/dist/resolution/types.d.ts.map +0 -1
- package/dist/resolution/types.js +0 -8
- package/dist/resolution/types.js.map +0 -1
- package/dist/search/query-parser.d.ts +0 -57
- package/dist/search/query-parser.d.ts.map +0 -1
- package/dist/search/query-parser.js +0 -177
- package/dist/search/query-parser.js.map +0 -1
- package/dist/search/query-utils.d.ts +0 -53
- package/dist/search/query-utils.d.ts.map +0 -1
- package/dist/search/query-utils.js +0 -350
- package/dist/search/query-utils.js.map +0 -1
- package/dist/sync/git-hooks.d.ts +0 -45
- package/dist/sync/git-hooks.d.ts.map +0 -1
- package/dist/sync/git-hooks.js +0 -223
- package/dist/sync/git-hooks.js.map +0 -1
- package/dist/sync/index.d.ts +0 -17
- package/dist/sync/index.d.ts.map +0 -1
- package/dist/sync/index.js +0 -28
- package/dist/sync/index.js.map +0 -1
- package/dist/sync/watch-policy.d.ts +0 -48
- package/dist/sync/watch-policy.d.ts.map +0 -1
- package/dist/sync/watch-policy.js +0 -124
- package/dist/sync/watch-policy.js.map +0 -1
- package/dist/sync/watcher.d.ts +0 -81
- package/dist/sync/watcher.d.ts.map +0 -1
- package/dist/sync/watcher.js +0 -194
- package/dist/sync/watcher.js.map +0 -1
- package/dist/types.d.ts +0 -423
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -256
- package/dist/types.js.map +0 -1
- package/dist/ui/glyphs.d.ts +0 -42
- package/dist/ui/glyphs.d.ts.map +0 -1
- package/dist/ui/glyphs.js +0 -78
- package/dist/ui/glyphs.js.map +0 -1
- package/dist/ui/shimmer-progress.d.ts +0 -11
- package/dist/ui/shimmer-progress.d.ts.map +0 -1
- package/dist/ui/shimmer-progress.js +0 -90
- package/dist/ui/shimmer-progress.js.map +0 -1
- package/dist/ui/shimmer-worker.d.ts +0 -2
- package/dist/ui/shimmer-worker.d.ts.map +0 -1
- package/dist/ui/shimmer-worker.js +0 -118
- package/dist/ui/shimmer-worker.js.map +0 -1
- package/dist/ui/types.d.ts +0 -17
- package/dist/ui/types.d.ts.map +0 -1
- package/dist/ui/types.js +0 -3
- package/dist/ui/types.js.map +0 -1
- package/dist/utils.d.ts +0 -205
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.js +0 -549
- package/dist/utils.js.map +0 -1
- package/scripts/agent-eval/audit.sh +0 -68
- package/scripts/agent-eval/itrun.sh +0 -107
- package/scripts/agent-eval/parse-run.mjs +0 -45
- package/scripts/agent-eval/parse-session.mjs +0 -93
- package/scripts/agent-eval/run-agent.sh +0 -34
- package/scripts/agent-eval/run-all.sh +0 -67
- package/scripts/extract-release-notes.mjs +0 -130
- package/scripts/local-install.sh +0 -41
- package/scripts/patch-tree-sitter-dart.js +0 -112
- package/scripts/release.sh +0 -68
package/dist/graph/queries.js
DELETED
|
@@ -1,366 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Graph Query Functions
|
|
4
|
-
*
|
|
5
|
-
* Higher-level query functions built on top of traversal algorithms.
|
|
6
|
-
*/
|
|
7
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.GraphQueryManager = void 0;
|
|
9
|
-
const traversal_1 = require("./traversal");
|
|
10
|
-
/**
|
|
11
|
-
* Graph query manager for complex queries
|
|
12
|
-
*/
|
|
13
|
-
class GraphQueryManager {
|
|
14
|
-
queries;
|
|
15
|
-
traverser;
|
|
16
|
-
constructor(queries) {
|
|
17
|
-
this.queries = queries;
|
|
18
|
-
this.traverser = new traversal_1.GraphTraverser(queries);
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Get full context for a node
|
|
22
|
-
*
|
|
23
|
-
* Returns the focal node along with its ancestors, children,
|
|
24
|
-
* and both incoming and outgoing references.
|
|
25
|
-
*
|
|
26
|
-
* @param nodeId - ID of the focal node
|
|
27
|
-
* @returns Context object with all related information
|
|
28
|
-
*/
|
|
29
|
-
getContext(nodeId) {
|
|
30
|
-
const focal = this.queries.getNodeById(nodeId);
|
|
31
|
-
if (!focal) {
|
|
32
|
-
throw new Error(`Node not found: ${nodeId}`);
|
|
33
|
-
}
|
|
34
|
-
// Get ancestors (containment hierarchy)
|
|
35
|
-
const ancestors = this.traverser.getAncestors(nodeId);
|
|
36
|
-
// Get children
|
|
37
|
-
const children = this.traverser.getChildren(nodeId);
|
|
38
|
-
// Get incoming references (things that reference this node)
|
|
39
|
-
const incomingEdges = this.queries.getIncomingEdges(nodeId);
|
|
40
|
-
const incomingRefs = [];
|
|
41
|
-
for (const edge of incomingEdges) {
|
|
42
|
-
// Skip containment edges (already in ancestors)
|
|
43
|
-
if (edge.kind === 'contains') {
|
|
44
|
-
continue;
|
|
45
|
-
}
|
|
46
|
-
const node = this.queries.getNodeById(edge.source);
|
|
47
|
-
if (node) {
|
|
48
|
-
incomingRefs.push({ node, edge });
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
// Get outgoing references (things this node references)
|
|
52
|
-
const outgoingEdges = this.queries.getOutgoingEdges(nodeId);
|
|
53
|
-
const outgoingRefs = [];
|
|
54
|
-
for (const edge of outgoingEdges) {
|
|
55
|
-
// Skip containment edges (already in children)
|
|
56
|
-
if (edge.kind === 'contains') {
|
|
57
|
-
continue;
|
|
58
|
-
}
|
|
59
|
-
const node = this.queries.getNodeById(edge.target);
|
|
60
|
-
if (node) {
|
|
61
|
-
outgoingRefs.push({ node, edge });
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
// Get type information (type_of, returns edges)
|
|
65
|
-
const types = [];
|
|
66
|
-
const typeEdgeKinds = ['type_of', 'returns'];
|
|
67
|
-
for (const kind of typeEdgeKinds) {
|
|
68
|
-
const typeEdges = this.queries.getOutgoingEdges(nodeId, [kind]);
|
|
69
|
-
for (const edge of typeEdges) {
|
|
70
|
-
const typeNode = this.queries.getNodeById(edge.target);
|
|
71
|
-
if (typeNode && !types.some((t) => t.id === typeNode.id)) {
|
|
72
|
-
types.push(typeNode);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
// Get relevant imports
|
|
77
|
-
const imports = [];
|
|
78
|
-
const fileNode = ancestors.find((a) => a.kind === 'file');
|
|
79
|
-
if (fileNode) {
|
|
80
|
-
const importEdges = this.queries.getOutgoingEdges(fileNode.id, ['imports']);
|
|
81
|
-
for (const edge of importEdges) {
|
|
82
|
-
const importNode = this.queries.getNodeById(edge.target);
|
|
83
|
-
if (importNode) {
|
|
84
|
-
imports.push(importNode);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return {
|
|
89
|
-
focal,
|
|
90
|
-
ancestors,
|
|
91
|
-
children,
|
|
92
|
-
incomingRefs,
|
|
93
|
-
outgoingRefs,
|
|
94
|
-
types,
|
|
95
|
-
imports,
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Get dependencies of a file
|
|
100
|
-
*
|
|
101
|
-
* Returns all files that this file imports from.
|
|
102
|
-
*
|
|
103
|
-
* @param filePath - Path to the file
|
|
104
|
-
* @returns Array of file paths this file depends on
|
|
105
|
-
*/
|
|
106
|
-
getFileDependencies(filePath) {
|
|
107
|
-
const nodes = this.queries.getNodesByFile(filePath);
|
|
108
|
-
const fileNode = nodes.find((n) => n.kind === 'file');
|
|
109
|
-
if (!fileNode) {
|
|
110
|
-
return [];
|
|
111
|
-
}
|
|
112
|
-
const dependencies = new Set();
|
|
113
|
-
const importEdges = this.queries.getOutgoingEdges(fileNode.id, ['imports']);
|
|
114
|
-
for (const edge of importEdges) {
|
|
115
|
-
const targetNode = this.queries.getNodeById(edge.target);
|
|
116
|
-
if (targetNode && targetNode.filePath !== filePath) {
|
|
117
|
-
dependencies.add(targetNode.filePath);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
return Array.from(dependencies);
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Get dependents of a file
|
|
124
|
-
*
|
|
125
|
-
* Returns all files that import from this file.
|
|
126
|
-
*
|
|
127
|
-
* @param filePath - Path to the file
|
|
128
|
-
* @returns Array of file paths that depend on this file
|
|
129
|
-
*/
|
|
130
|
-
getFileDependents(filePath) {
|
|
131
|
-
const nodes = this.queries.getNodesByFile(filePath);
|
|
132
|
-
const dependents = new Set();
|
|
133
|
-
// Check file-level incoming import edges (file:X imports file:Y)
|
|
134
|
-
const fileNode = nodes.find((n) => n.kind === 'file');
|
|
135
|
-
if (fileNode) {
|
|
136
|
-
const incomingFileEdges = this.queries.getIncomingEdges(fileNode.id, ['imports']);
|
|
137
|
-
for (const edge of incomingFileEdges) {
|
|
138
|
-
const sourceNode = this.queries.getNodeById(edge.source);
|
|
139
|
-
if (sourceNode && sourceNode.filePath !== filePath) {
|
|
140
|
-
dependents.add(sourceNode.filePath);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
// Also check node-level imports of exported symbols
|
|
145
|
-
for (const node of nodes) {
|
|
146
|
-
if (node.isExported) {
|
|
147
|
-
const incomingEdges = this.queries.getIncomingEdges(node.id, ['imports']);
|
|
148
|
-
for (const edge of incomingEdges) {
|
|
149
|
-
const sourceNode = this.queries.getNodeById(edge.source);
|
|
150
|
-
if (sourceNode && sourceNode.filePath !== filePath) {
|
|
151
|
-
dependents.add(sourceNode.filePath);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
return Array.from(dependents);
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Get all symbols exported by a file
|
|
160
|
-
*
|
|
161
|
-
* @param filePath - Path to the file
|
|
162
|
-
* @returns Array of exported nodes
|
|
163
|
-
*/
|
|
164
|
-
getExportedSymbols(filePath) {
|
|
165
|
-
const nodes = this.queries.getNodesByFile(filePath);
|
|
166
|
-
return nodes.filter((n) => n.isExported);
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Find symbols by qualified name pattern
|
|
170
|
-
*
|
|
171
|
-
* @param pattern - Pattern to match (supports * wildcard)
|
|
172
|
-
* @returns Array of matching nodes
|
|
173
|
-
*/
|
|
174
|
-
findByQualifiedName(pattern) {
|
|
175
|
-
// Convert glob pattern to regex
|
|
176
|
-
const regexPattern = pattern
|
|
177
|
-
.replace(/[.+^${}()|[\]\\]/g, '\\$&')
|
|
178
|
-
.replace(/\*/g, '.*')
|
|
179
|
-
.replace(/\?/g, '.');
|
|
180
|
-
const regex = new RegExp(`^${regexPattern}$`);
|
|
181
|
-
// This is inefficient for large graphs - would need FTS index on qualified_name
|
|
182
|
-
// For now, use kind-based filtering if possible
|
|
183
|
-
const allNodes = [];
|
|
184
|
-
const kinds = [
|
|
185
|
-
'class',
|
|
186
|
-
'function',
|
|
187
|
-
'method',
|
|
188
|
-
'interface',
|
|
189
|
-
'type_alias',
|
|
190
|
-
'variable',
|
|
191
|
-
'constant',
|
|
192
|
-
];
|
|
193
|
-
for (const kind of kinds) {
|
|
194
|
-
const nodes = this.queries.getNodesByKind(kind);
|
|
195
|
-
for (const node of nodes) {
|
|
196
|
-
if (regex.test(node.qualifiedName)) {
|
|
197
|
-
allNodes.push(node);
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
return allNodes;
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* Get the module/package structure
|
|
205
|
-
*
|
|
206
|
-
* Returns a tree structure of files organized by directory.
|
|
207
|
-
*
|
|
208
|
-
* @returns Map of directory paths to contained files
|
|
209
|
-
*/
|
|
210
|
-
getModuleStructure() {
|
|
211
|
-
const files = this.queries.getAllFiles();
|
|
212
|
-
const structure = new Map();
|
|
213
|
-
for (const file of files) {
|
|
214
|
-
const parts = file.path.split('/');
|
|
215
|
-
const dir = parts.slice(0, -1).join('/') || '.';
|
|
216
|
-
if (!structure.has(dir)) {
|
|
217
|
-
structure.set(dir, []);
|
|
218
|
-
}
|
|
219
|
-
structure.get(dir).push(file.path);
|
|
220
|
-
}
|
|
221
|
-
return structure;
|
|
222
|
-
}
|
|
223
|
-
/**
|
|
224
|
-
* Find circular dependencies in the graph
|
|
225
|
-
*
|
|
226
|
-
* @returns Array of cycles, each cycle is an array of node IDs
|
|
227
|
-
*/
|
|
228
|
-
findCircularDependencies() {
|
|
229
|
-
const files = this.queries.getAllFiles();
|
|
230
|
-
const cycles = [];
|
|
231
|
-
const visited = new Set();
|
|
232
|
-
const recursionStack = new Set();
|
|
233
|
-
const dfs = (filePath, path) => {
|
|
234
|
-
if (recursionStack.has(filePath)) {
|
|
235
|
-
// Found a cycle
|
|
236
|
-
const cycleStart = path.indexOf(filePath);
|
|
237
|
-
if (cycleStart !== -1) {
|
|
238
|
-
cycles.push(path.slice(cycleStart));
|
|
239
|
-
}
|
|
240
|
-
return;
|
|
241
|
-
}
|
|
242
|
-
if (visited.has(filePath)) {
|
|
243
|
-
return;
|
|
244
|
-
}
|
|
245
|
-
visited.add(filePath);
|
|
246
|
-
recursionStack.add(filePath);
|
|
247
|
-
const dependencies = this.getFileDependencies(filePath);
|
|
248
|
-
for (const dep of dependencies) {
|
|
249
|
-
dfs(dep, [...path, filePath]);
|
|
250
|
-
}
|
|
251
|
-
recursionStack.delete(filePath);
|
|
252
|
-
};
|
|
253
|
-
for (const file of files) {
|
|
254
|
-
if (!visited.has(file.path)) {
|
|
255
|
-
dfs(file.path, []);
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
return cycles;
|
|
259
|
-
}
|
|
260
|
-
/**
|
|
261
|
-
* Get complexity metrics for a node
|
|
262
|
-
*
|
|
263
|
-
* @param nodeId - ID of the node
|
|
264
|
-
* @returns Object containing various complexity metrics
|
|
265
|
-
*/
|
|
266
|
-
getNodeMetrics(nodeId) {
|
|
267
|
-
const incomingEdges = this.queries.getIncomingEdges(nodeId);
|
|
268
|
-
const outgoingEdges = this.queries.getOutgoingEdges(nodeId);
|
|
269
|
-
const callEdges = outgoingEdges.filter((e) => e.kind === 'calls');
|
|
270
|
-
const callerEdges = incomingEdges.filter((e) => e.kind === 'calls');
|
|
271
|
-
const containsEdges = outgoingEdges.filter((e) => e.kind === 'contains');
|
|
272
|
-
const ancestors = this.traverser.getAncestors(nodeId);
|
|
273
|
-
return {
|
|
274
|
-
incomingEdgeCount: incomingEdges.length,
|
|
275
|
-
outgoingEdgeCount: outgoingEdges.length,
|
|
276
|
-
callCount: callEdges.length,
|
|
277
|
-
callerCount: callerEdges.length,
|
|
278
|
-
childCount: containsEdges.length,
|
|
279
|
-
depth: ancestors.length,
|
|
280
|
-
};
|
|
281
|
-
}
|
|
282
|
-
/**
|
|
283
|
-
* Find dead code (nodes with no incoming references)
|
|
284
|
-
*
|
|
285
|
-
* @param kinds - Node kinds to check (default: functions, methods, classes)
|
|
286
|
-
* @returns Array of unreferenced nodes
|
|
287
|
-
*/
|
|
288
|
-
findDeadCode(kinds) {
|
|
289
|
-
const targetKinds = kinds || ['function', 'method', 'class'];
|
|
290
|
-
const deadCode = [];
|
|
291
|
-
for (const kind of targetKinds) {
|
|
292
|
-
const nodes = this.queries.getNodesByKind(kind);
|
|
293
|
-
for (const node of nodes) {
|
|
294
|
-
// Skip exported symbols (they may be used externally)
|
|
295
|
-
if (node.isExported) {
|
|
296
|
-
continue;
|
|
297
|
-
}
|
|
298
|
-
const incomingEdges = this.queries.getIncomingEdges(node.id);
|
|
299
|
-
// Filter out containment edges
|
|
300
|
-
const references = incomingEdges.filter((e) => e.kind !== 'contains');
|
|
301
|
-
if (references.length === 0) {
|
|
302
|
-
deadCode.push(node);
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
return deadCode;
|
|
307
|
-
}
|
|
308
|
-
/**
|
|
309
|
-
* Get subgraph containing nodes matching a filter
|
|
310
|
-
*
|
|
311
|
-
* @param filter - Filter function to select nodes
|
|
312
|
-
* @param includeEdges - Whether to include edges between matching nodes
|
|
313
|
-
* @returns Subgraph containing matching nodes
|
|
314
|
-
*/
|
|
315
|
-
getFilteredSubgraph(filter, includeEdges = true) {
|
|
316
|
-
const nodes = new Map();
|
|
317
|
-
const edges = [];
|
|
318
|
-
// Get all nodes of common kinds
|
|
319
|
-
const kinds = [
|
|
320
|
-
'file',
|
|
321
|
-
'module',
|
|
322
|
-
'class',
|
|
323
|
-
'struct',
|
|
324
|
-
'interface',
|
|
325
|
-
'trait',
|
|
326
|
-
'function',
|
|
327
|
-
'method',
|
|
328
|
-
'variable',
|
|
329
|
-
'constant',
|
|
330
|
-
'enum',
|
|
331
|
-
'type_alias',
|
|
332
|
-
];
|
|
333
|
-
for (const kind of kinds) {
|
|
334
|
-
const kindNodes = this.queries.getNodesByKind(kind);
|
|
335
|
-
for (const node of kindNodes) {
|
|
336
|
-
if (filter(node)) {
|
|
337
|
-
nodes.set(node.id, node);
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
// Include edges between matching nodes
|
|
342
|
-
if (includeEdges) {
|
|
343
|
-
for (const nodeId of nodes.keys()) {
|
|
344
|
-
const outgoing = this.queries.getOutgoingEdges(nodeId);
|
|
345
|
-
for (const edge of outgoing) {
|
|
346
|
-
if (nodes.has(edge.target)) {
|
|
347
|
-
edges.push(edge);
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
return {
|
|
353
|
-
nodes,
|
|
354
|
-
edges,
|
|
355
|
-
roots: [],
|
|
356
|
-
};
|
|
357
|
-
}
|
|
358
|
-
/**
|
|
359
|
-
* Access the underlying traverser for direct traversal operations
|
|
360
|
-
*/
|
|
361
|
-
getTraverser() {
|
|
362
|
-
return this.traverser;
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
exports.GraphQueryManager = GraphQueryManager;
|
|
366
|
-
//# sourceMappingURL=queries.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/graph/queries.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Graph Traversal Algorithms
|
|
3
|
-
*
|
|
4
|
-
* BFS and DFS traversal for the code knowledge graph.
|
|
5
|
-
*/
|
|
6
|
-
import { Node, Edge, Subgraph, TraversalOptions, EdgeKind } from '../types';
|
|
7
|
-
import { QueryBuilder } from '../db/queries';
|
|
8
|
-
/**
|
|
9
|
-
* Graph traverser for BFS and DFS traversal
|
|
10
|
-
*/
|
|
11
|
-
export declare class GraphTraverser {
|
|
12
|
-
private queries;
|
|
13
|
-
constructor(queries: QueryBuilder);
|
|
14
|
-
/**
|
|
15
|
-
* Traverse the graph using breadth-first search
|
|
16
|
-
*
|
|
17
|
-
* @param startId - Starting node ID
|
|
18
|
-
* @param options - Traversal options
|
|
19
|
-
* @returns Subgraph containing traversed nodes and edges
|
|
20
|
-
*/
|
|
21
|
-
traverseBFS(startId: string, options?: TraversalOptions): Subgraph;
|
|
22
|
-
/**
|
|
23
|
-
* Traverse the graph using depth-first search
|
|
24
|
-
*
|
|
25
|
-
* @param startId - Starting node ID
|
|
26
|
-
* @param options - Traversal options
|
|
27
|
-
* @returns Subgraph containing traversed nodes and edges
|
|
28
|
-
*/
|
|
29
|
-
traverseDFS(startId: string, options?: TraversalOptions): Subgraph;
|
|
30
|
-
/**
|
|
31
|
-
* Recursive DFS helper
|
|
32
|
-
*/
|
|
33
|
-
private dfsRecursive;
|
|
34
|
-
/**
|
|
35
|
-
* Get adjacent edges based on direction
|
|
36
|
-
*/
|
|
37
|
-
private getAdjacentEdges;
|
|
38
|
-
/**
|
|
39
|
-
* Find all callers of a function/method
|
|
40
|
-
*
|
|
41
|
-
* @param nodeId - ID of the function/method node
|
|
42
|
-
* @param maxDepth - Maximum depth to traverse (default: 1)
|
|
43
|
-
* @returns Array of nodes that call this function
|
|
44
|
-
*/
|
|
45
|
-
getCallers(nodeId: string, maxDepth?: number): Array<{
|
|
46
|
-
node: Node;
|
|
47
|
-
edge: Edge;
|
|
48
|
-
}>;
|
|
49
|
-
private getCallersRecursive;
|
|
50
|
-
/**
|
|
51
|
-
* Find all functions/methods called by a function
|
|
52
|
-
*
|
|
53
|
-
* @param nodeId - ID of the function/method node
|
|
54
|
-
* @param maxDepth - Maximum depth to traverse (default: 1)
|
|
55
|
-
* @returns Array of nodes called by this function
|
|
56
|
-
*/
|
|
57
|
-
getCallees(nodeId: string, maxDepth?: number): Array<{
|
|
58
|
-
node: Node;
|
|
59
|
-
edge: Edge;
|
|
60
|
-
}>;
|
|
61
|
-
private getCalleesRecursive;
|
|
62
|
-
/**
|
|
63
|
-
* Get the call graph for a function (both callers and callees)
|
|
64
|
-
*
|
|
65
|
-
* @param nodeId - ID of the function/method node
|
|
66
|
-
* @param depth - Maximum depth in each direction (default: 2)
|
|
67
|
-
* @returns Subgraph containing the call graph
|
|
68
|
-
*/
|
|
69
|
-
getCallGraph(nodeId: string, depth?: number): Subgraph;
|
|
70
|
-
/**
|
|
71
|
-
* Get the type hierarchy for a class/interface
|
|
72
|
-
*
|
|
73
|
-
* @param nodeId - ID of the class/interface node
|
|
74
|
-
* @returns Subgraph containing the type hierarchy
|
|
75
|
-
*/
|
|
76
|
-
getTypeHierarchy(nodeId: string): Subgraph;
|
|
77
|
-
private getTypeAncestors;
|
|
78
|
-
private getTypeDescendants;
|
|
79
|
-
/**
|
|
80
|
-
* Find all usages of a symbol
|
|
81
|
-
*
|
|
82
|
-
* @param nodeId - ID of the symbol node
|
|
83
|
-
* @returns Array of nodes and edges that reference this symbol
|
|
84
|
-
*/
|
|
85
|
-
findUsages(nodeId: string): Array<{
|
|
86
|
-
node: Node;
|
|
87
|
-
edge: Edge;
|
|
88
|
-
}>;
|
|
89
|
-
/**
|
|
90
|
-
* Calculate the impact radius of a node
|
|
91
|
-
*
|
|
92
|
-
* Returns all nodes that could be affected by changes to this node.
|
|
93
|
-
*
|
|
94
|
-
* @param nodeId - ID of the node
|
|
95
|
-
* @param maxDepth - Maximum depth to traverse (default: 3)
|
|
96
|
-
* @returns Subgraph containing potentially impacted nodes
|
|
97
|
-
*/
|
|
98
|
-
getImpactRadius(nodeId: string, maxDepth?: number): Subgraph;
|
|
99
|
-
private getImpactRecursive;
|
|
100
|
-
/**
|
|
101
|
-
* Find the shortest path between two nodes
|
|
102
|
-
*
|
|
103
|
-
* @param fromId - Starting node ID
|
|
104
|
-
* @param toId - Target node ID
|
|
105
|
-
* @param edgeKinds - Edge types to consider (all if empty)
|
|
106
|
-
* @returns Array of nodes and edges forming the path, or null if no path exists
|
|
107
|
-
*/
|
|
108
|
-
findPath(fromId: string, toId: string, edgeKinds?: EdgeKind[]): Array<{
|
|
109
|
-
node: Node;
|
|
110
|
-
edge: Edge | null;
|
|
111
|
-
}> | null;
|
|
112
|
-
/**
|
|
113
|
-
* Get the containment hierarchy for a node (ancestors)
|
|
114
|
-
*
|
|
115
|
-
* @param nodeId - ID of the node
|
|
116
|
-
* @returns Array of ancestor nodes from immediate parent to root
|
|
117
|
-
*/
|
|
118
|
-
getAncestors(nodeId: string): Node[];
|
|
119
|
-
/**
|
|
120
|
-
* Get immediate children of a node
|
|
121
|
-
*
|
|
122
|
-
* @param nodeId - ID of the node
|
|
123
|
-
* @returns Array of child nodes
|
|
124
|
-
*/
|
|
125
|
-
getChildren(nodeId: string): Node[];
|
|
126
|
-
}
|
|
127
|
-
//# sourceMappingURL=traversal.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"traversal.d.ts","sourceRoot":"","sources":["../../src/graph/traversal.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAuB7C;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAe;gBAElB,OAAO,EAAE,YAAY;IAIjC;;;;;;OAMG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,QAAQ;IA+EtE;;;;;;OAMG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,QAAQ;IAyBtE;;OAEG;IACH,OAAO,CAAC,YAAY;IA6CpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAmBxB;;;;;;OAMG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAU,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,IAAI,EAAE,IAAI,CAAA;KAAE,CAAC;IASnF,OAAO,CAAC,mBAAmB;IAuB3B;;;;;;OAMG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAU,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,IAAI,EAAE,IAAI,CAAA;KAAE,CAAC;IASnF,OAAO,CAAC,mBAAmB;IAuB3B;;;;;;OAMG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,QAAQ;IAiCzD;;;;;OAKG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ;IA0B1C,OAAO,CAAC,gBAAgB;IAuBxB,OAAO,CAAC,kBAAkB;IAuB1B;;;;;OAKG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,IAAI,EAAE,IAAI,CAAA;KAAE,CAAC;IAgB7D;;;;;;;;OAQG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAU,GAAG,QAAQ;IAuB/D,OAAO,CAAC,kBAAkB;IA6C1B;;;;;;;OAOG;IACH,QAAQ,CACN,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,SAAS,GAAE,QAAQ,EAAO,GACzB,KAAK,CAAC;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;KAAE,CAAC,GAAG,IAAI;IAgDlD;;;;;OAKG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE;IAgCpC;;;;;OAKG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE;CAapC"}
|