@ttsc/graph 0.16.5 → 0.16.6
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/lib/TtscGraphApplication.js +36 -23
- package/lib/TtscGraphApplication.js.map +1 -1
- package/lib/model/loadGraph.js +17 -17
- package/lib/server/accessAliases.js +53 -0
- package/lib/server/accessAliases.js.map +1 -0
- package/lib/server/createServer.js +1133 -634
- package/lib/server/createServer.js.map +1 -1
- package/lib/server/instructions.js +69 -21
- package/lib/server/instructions.js.map +1 -1
- package/lib/server/runDetails.js +413 -0
- package/lib/server/runDetails.js.map +1 -0
- package/lib/server/{runIndex.js → runEntrypoints.js} +91 -26
- package/lib/server/runEntrypoints.js.map +1 -0
- package/lib/server/{runQuery.js → runLookup.js} +102 -15
- package/lib/server/runLookup.js.map +1 -0
- package/lib/server/runOverview.js +31 -21
- package/lib/server/runOverview.js.map +1 -1
- package/lib/server/runTrace.js +133 -38
- package/lib/server/runTrace.js.map +1 -1
- package/lib/structures/{ITtscGraphQuery.js → ITtscGraphDetails.js} +1 -1
- package/lib/structures/ITtscGraphDetails.js.map +1 -0
- package/lib/structures/ITtscGraphEntrypoints.js +3 -0
- package/lib/structures/ITtscGraphEntrypoints.js.map +1 -0
- package/lib/structures/{ITtscGraphExpand.js → ITtscGraphEscape.js} +1 -1
- package/lib/structures/ITtscGraphEscape.js.map +1 -0
- package/lib/structures/{ITtscGraphIndex.js → ITtscGraphLookup.js} +1 -1
- package/lib/structures/ITtscGraphLookup.js.map +1 -0
- package/lib/structures/index.js +4 -3
- package/lib/structures/index.js.map +1 -1
- package/package.json +2 -2
- package/src/TtscGraphApplication.ts +39 -32
- package/src/server/accessAliases.ts +55 -0
- package/src/server/createServer.ts +4 -7
- package/src/server/instructions.ts +69 -21
- package/src/server/runDetails.ts +469 -0
- package/src/server/{runIndex.ts → runEntrypoints.ts} +109 -34
- package/src/server/{runQuery.ts → runLookup.ts} +123 -16
- package/src/server/runOverview.ts +35 -23
- package/src/server/runTrace.ts +164 -38
- package/src/structures/ITtscGraphApplication.ts +100 -52
- package/src/structures/ITtscGraphDecorator.ts +12 -14
- package/src/structures/ITtscGraphDetails.ts +134 -0
- package/src/structures/{ITtscGraphIndex.ts → ITtscGraphEntrypoints.ts} +34 -16
- package/src/structures/ITtscGraphEscape.ts +39 -0
- package/src/structures/ITtscGraphEvidence.ts +5 -8
- package/src/structures/ITtscGraphLookup.ts +61 -0
- package/src/structures/ITtscGraphNode.ts +10 -4
- package/src/structures/ITtscGraphOverview.ts +24 -16
- package/src/structures/ITtscGraphTrace.ts +54 -11
- package/src/structures/TtscGraphNodeKind.ts +2 -2
- package/src/structures/index.ts +4 -3
- package/lib/server/runExpand.js +0 -177
- package/lib/server/runExpand.js.map +0 -1
- package/lib/server/runIndex.js.map +0 -1
- package/lib/server/runQuery.js.map +0 -1
- package/lib/structures/ITtscGraphExpand.js.map +0 -1
- package/lib/structures/ITtscGraphIndex.js.map +0 -1
- package/lib/structures/ITtscGraphQuery.js.map +0 -1
- package/src/server/runExpand.ts +0 -186
- package/src/structures/ITtscGraphExpand.ts +0 -85
- package/src/structures/ITtscGraphQuery.ts +0 -49
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.runEntrypoints = runEntrypoints;
|
|
4
4
|
const resolveHandle_1 = require("./resolveHandle");
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const DEFAULT_LIMIT =
|
|
8
|
-
const MAX_LIMIT =
|
|
9
|
-
const DEFAULT_NEIGHBORS =
|
|
10
|
-
const MAX_NEIGHBORS =
|
|
11
|
-
const MAX_SEEDS =
|
|
5
|
+
const runDetails_1 = require("./runDetails");
|
|
6
|
+
const runLookup_1 = require("./runLookup");
|
|
7
|
+
const DEFAULT_LIMIT = 4;
|
|
8
|
+
const MAX_LIMIT = 8;
|
|
9
|
+
const DEFAULT_NEIGHBORS = 0;
|
|
10
|
+
const MAX_NEIGHBORS = 2;
|
|
11
|
+
const MAX_SEEDS = 3;
|
|
12
12
|
const STRUCTURAL_KINDS = new Set(["contains", "exports", "imports"]);
|
|
13
13
|
/**
|
|
14
|
-
* Build the first source-free
|
|
15
|
-
* model stable handles, declaration signatures, and direct graph
|
|
16
|
-
* deliberately not a source reader;
|
|
17
|
-
*
|
|
14
|
+
* Build the first source-free entrypoints list for a code question. The result
|
|
15
|
+
* gives the model stable handles, declaration signatures, and direct graph
|
|
16
|
+
* context. It is deliberately not a source reader; details adds selected symbol
|
|
17
|
+
* shape and ranges, not implementation text.
|
|
18
18
|
*/
|
|
19
|
-
function
|
|
19
|
+
function runEntrypoints(graph, props) {
|
|
20
20
|
const query = props.query.trim();
|
|
21
21
|
const limit = bound(props.limit, DEFAULT_LIMIT, 1, MAX_LIMIT);
|
|
22
22
|
const neighborLimit = bound(props.neighbors, DEFAULT_NEIGHBORS, 0, MAX_NEIGHBORS);
|
|
23
|
-
const
|
|
24
|
-
const hits =
|
|
25
|
-
const mentions = directMentions(query).map((handle) => {
|
|
23
|
+
const lookupResult = (0, runLookup_1.runLookup)(graph, { type: "lookup", query, limit });
|
|
24
|
+
const hits = lookupResult.hits.map((hit) => ({ ...hit }));
|
|
25
|
+
const mentions = directMentions(graph, query).map((handle) => {
|
|
26
26
|
const resolved = (0, resolveHandle_1.resolveGraphHandle)(graph, handle, 6);
|
|
27
27
|
const mention = { handle };
|
|
28
28
|
if (resolved.node !== undefined)
|
|
@@ -60,15 +60,14 @@ function runIndex(graph, props) {
|
|
|
60
60
|
});
|
|
61
61
|
}
|
|
62
62
|
return {
|
|
63
|
+
type: "entrypoints",
|
|
63
64
|
query,
|
|
64
65
|
hits,
|
|
65
66
|
mentions,
|
|
66
67
|
neighborhood,
|
|
67
68
|
next: {
|
|
68
|
-
|
|
69
|
-
traceFrom:
|
|
70
|
-
.map((mention) => mention.node?.id)
|
|
71
|
-
.filter((id) => id !== undefined),
|
|
69
|
+
details: seeds.slice(0, MAX_SEEDS).map((node) => node.id),
|
|
70
|
+
traceFrom: seeds.slice(0, MAX_SEEDS).map((node) => node.id),
|
|
72
71
|
},
|
|
73
72
|
...(truncated ? { truncated: true } : {}),
|
|
74
73
|
};
|
|
@@ -82,9 +81,12 @@ function nodeOf(graph, node) {
|
|
|
82
81
|
};
|
|
83
82
|
if (node.evidence?.startLine !== undefined)
|
|
84
83
|
out.line = node.evidence.startLine;
|
|
85
|
-
const signature = (0,
|
|
84
|
+
const signature = (0, runDetails_1.signatureOf)(graph.project, node);
|
|
86
85
|
if (signature !== undefined)
|
|
87
86
|
out.signature = signature;
|
|
87
|
+
const decorators = (0, runDetails_1.decoratorsOf)(node);
|
|
88
|
+
if (decorators !== undefined)
|
|
89
|
+
out.decorators = decorators;
|
|
88
90
|
return out;
|
|
89
91
|
}
|
|
90
92
|
function refOf(node, edge) {
|
|
@@ -97,10 +99,13 @@ function refOf(node, edge) {
|
|
|
97
99
|
};
|
|
98
100
|
if (node.evidence?.startLine !== undefined)
|
|
99
101
|
out.line = node.evidence.startLine;
|
|
102
|
+
const evidence = (0, runDetails_1.edgeEvidenceOf)(edge);
|
|
103
|
+
if (evidence !== undefined)
|
|
104
|
+
out.evidence = evidence;
|
|
100
105
|
return out;
|
|
101
106
|
}
|
|
102
107
|
function refs(graph, edges, end, limit) {
|
|
103
|
-
const
|
|
108
|
+
const ranked = [];
|
|
104
109
|
const seen = new Set();
|
|
105
110
|
let available = 0;
|
|
106
111
|
for (const edge of edges) {
|
|
@@ -114,15 +119,66 @@ function refs(graph, edges, end, limit) {
|
|
|
114
119
|
continue;
|
|
115
120
|
seen.add(key);
|
|
116
121
|
available++;
|
|
122
|
+
const ref = refOf(other, edge);
|
|
123
|
+
ranked.push({ ref, rank: refRank(ref, edge) });
|
|
124
|
+
}
|
|
125
|
+
ranked.sort((a, b) => a.rank - b.rank);
|
|
126
|
+
const items = [];
|
|
127
|
+
for (const item of ranked) {
|
|
117
128
|
if (items.length < limit)
|
|
118
|
-
items.push(
|
|
129
|
+
items.push(item.ref);
|
|
119
130
|
}
|
|
120
131
|
return { items, truncated: available > items.length };
|
|
121
132
|
}
|
|
122
|
-
function
|
|
133
|
+
function refRank(ref, edge) {
|
|
134
|
+
return (edgeKindRank(edge.kind) * 100000 +
|
|
135
|
+
evidenceRank(edge) +
|
|
136
|
+
(ref.file.startsWith("bundled://") ? 20000 : 0));
|
|
137
|
+
}
|
|
138
|
+
function evidenceRank(edge) {
|
|
139
|
+
const line = edge.evidence?.startLine ?? 9999;
|
|
140
|
+
const col = edge.evidence?.startCol ?? 999;
|
|
141
|
+
return line * 100 + col;
|
|
142
|
+
}
|
|
143
|
+
function edgeKindRank(kind) {
|
|
144
|
+
switch (kind) {
|
|
145
|
+
case "calls":
|
|
146
|
+
return 0;
|
|
147
|
+
case "instantiates":
|
|
148
|
+
return 1;
|
|
149
|
+
case "accesses":
|
|
150
|
+
case "renders":
|
|
151
|
+
return 2;
|
|
152
|
+
case "tests":
|
|
153
|
+
return 3;
|
|
154
|
+
case "overrides":
|
|
155
|
+
case "decorates":
|
|
156
|
+
return 4;
|
|
157
|
+
case "extends":
|
|
158
|
+
case "implements":
|
|
159
|
+
return 5;
|
|
160
|
+
case "type_ref":
|
|
161
|
+
return 6;
|
|
162
|
+
default:
|
|
163
|
+
return 10;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
function directMentions(graph, query) {
|
|
123
167
|
const handles = new Set();
|
|
168
|
+
for (const token of query.split(/\s+/)) {
|
|
169
|
+
const handle = normalizeNodeIdToken(token);
|
|
170
|
+
if (handle !== undefined && graph.node(handle) !== undefined) {
|
|
171
|
+
handles.add(handle);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
124
174
|
for (const match of query.matchAll(/`([^`]+)`/g)) {
|
|
125
|
-
const
|
|
175
|
+
const raw = match[1] ?? "";
|
|
176
|
+
const id = normalizeNodeIdToken(raw);
|
|
177
|
+
if (id !== undefined && graph.node(id) !== undefined) {
|
|
178
|
+
handles.add(id);
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
const handle = normalizeHandle(raw);
|
|
126
182
|
if (handle !== undefined)
|
|
127
183
|
handles.add(handle);
|
|
128
184
|
}
|
|
@@ -133,6 +189,15 @@ function directMentions(query) {
|
|
|
133
189
|
}
|
|
134
190
|
return [...handles];
|
|
135
191
|
}
|
|
192
|
+
function normalizeNodeIdToken(raw) {
|
|
193
|
+
const value = raw
|
|
194
|
+
.trim()
|
|
195
|
+
.replace(/^[`"'([{]+/, "")
|
|
196
|
+
.replace(/[`"',.;:)\]}]+$/, "");
|
|
197
|
+
return /^[^\s#]+#[^\s#]+:(class|interface|type|enum|function|method|variable|property)$/.test(value)
|
|
198
|
+
? value
|
|
199
|
+
: undefined;
|
|
200
|
+
}
|
|
136
201
|
function normalizeHandle(raw) {
|
|
137
202
|
const value = raw.trim();
|
|
138
203
|
return /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*$/.test(value)
|
|
@@ -143,4 +208,4 @@ function bound(value, fallback, min, max) {
|
|
|
143
208
|
const n = value === undefined || !Number.isFinite(value) ? fallback : value;
|
|
144
209
|
return Math.max(min, Math.min(max, Math.floor(n)));
|
|
145
210
|
}
|
|
146
|
-
//# sourceMappingURL=
|
|
211
|
+
//# sourceMappingURL=runEntrypoints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runEntrypoints.js","sourceRoot":"","sources":["../../src/server/runEntrypoints.ts"],"names":[],"mappings":";;;AAIA,mDAAqD;AACrD,6CAAyE;AACzE,2CAAwC;AAExC,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,MAAM,SAAS,GAAG,CAAC,CAAC;AACpB,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,MAAM,SAAS,GAAG,CAAC,CAAC;AACpB,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAS,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAE7E;;;;;GAKG;AACH,wBACE,KAAsB,EACtB,KAAqC;IAErC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;IAC9D,MAAM,aAAa,GAAG,KAAK,CACzB,KAAK,CAAC,SAAS,EACf,iBAAiB,EACjB,CAAC,EACD,aAAa,CACd,CAAC;IAEF,MAAM,YAAY,GAAG,IAAA,qBAAS,EAAC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IACxE,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;IAE1D,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QAC3D,MAAM,QAAQ,GAAG,IAAA,kCAAkB,EAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QACtD,MAAM,OAAO,GAAmC,EAAE,MAAM,EAAE,CAAC;QAC3D,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS;YAC7B,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACpD,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CACpB,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAqB,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,OAAO,GAAG,CAAC,IAAgC,EAAQ,EAAE;QACzD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,OAAO;QACpD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC,CAAC;IACF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,IAAI;QAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAEpD,IAAI,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;IACzC,MAAM,YAAY,GAA0C,EAAE,CAAC;IAC/D,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;QAC3E,MAAM,QAAQ,GAAG,IAAI,CACnB,KAAK,EACL,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EACvB,MAAM,EACN,aAAa,CACd,CAAC;QACF,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS;YAAE,SAAS,GAAG,IAAI,CAAC;QAC/D,YAAY,CAAC,IAAI,CAAC;YAChB,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC;YACtB,SAAS,EAAE,QAAQ,CAAC,KAAK;YACzB,YAAY,EAAE,QAAQ,CAAC,KAAK;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,KAAK;QACL,IAAI;QACJ,QAAQ;QACR,YAAY;QACZ,IAAI,EAAE;YACJ,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACzD,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;SAC5D;QACD,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1C,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CACb,KAAsB,EACtB,IAAoB;IAEpB,MAAM,GAAG,GAAgC;QACvC,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,IAAI,EAAE,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI;QACrC,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;KAChB,CAAC;IACF,IAAI,IAAI,CAAC,QAAQ,EAAE,SAAS,KAAK,SAAS;QACxC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;IACrC,MAAM,SAAS,GAAG,IAAA,wBAAW,EAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACnD,IAAI,SAAS,KAAK,SAAS;QAAE,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;IACvD,MAAM,UAAU,GAAG,IAAA,yBAAY,EAAC,IAAI,CAAC,CAAC;IACtC,IAAI,UAAU,KAAK,SAAS;QAAE,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC;IAC1D,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,KAAK,CACZ,IAAoB,EACpB,IAAoB;IAEpB,MAAM,GAAG,GAAqC;QAC5C,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,IAAI,EAAE,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI;QACrC,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,QAAQ,EAAE,IAAI,CAAC,IAAI;KACpB,CAAC;IACF,IAAI,IAAI,CAAC,QAAQ,EAAE,SAAS,KAAK,SAAS;QACxC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;IACrC,MAAM,QAAQ,GAAG,IAAA,2BAAc,EAAC,IAAI,CAAC,CAAC;IACtC,IAAI,QAAQ,KAAK,SAAS;QAAE,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACpD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,IAAI,CACX,KAAsB,EACtB,KAAgC,EAChC,GAAkB,EAClB,KAAa;IAEb,MAAM,MAAM,GACV,EAAE,CAAC;IACL,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,SAAS;QAC3D,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;QACvC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,SAAS,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,KAAK,GAAuC,EAAE,CAAC;IACrD,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;AACxD,CAAC;AAED,SAAS,OAAO,CACd,GAAqC,EACrC,IAAoB;IAEpB,OAAO,CACL,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAO;QACjC,YAAY,CAAC,IAAI,CAAC;QAClB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CACjD,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,IAAoB;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,IAAI,IAAK,CAAC;IAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,IAAI,GAAG,CAAC;IAC3C,OAAO,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC1B,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,CAAC,CAAC;QACX,KAAK,cAAc;YACjB,OAAO,CAAC,CAAC;QACX,KAAK,UAAU,CAAC;QAChB,KAAK,SAAS;YACZ,OAAO,CAAC,CAAC;QACX,KAAK,OAAO;YACV,OAAO,CAAC,CAAC;QACX,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW;YACd,OAAO,CAAC,CAAC;QACX,KAAK,SAAS,CAAC;QACf,KAAK,YAAY;YACf,OAAO,CAAC,CAAC;QACX,KAAK,UAAU;YACb,OAAO,CAAC,CAAC;QACX;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAsB,EAAE,KAAa;IAC3D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,EAAE,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,QAAQ,CAChC,8CAA8C,CAC/C,EAAE,CAAC;QACF,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AACtB,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAW;IACvC,MAAM,KAAK,GAAG,GAAG;SACd,IAAI,EAAE;SACN,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;SACzB,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;IAClC,OAAO,iFAAiF,CAAC,IAAI,CAC3F,KAAK,CACN;QACC,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,GAAW;IAClC,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACzB,OAAO,2CAA2C,CAAC,IAAI,CAAC,KAAK,CAAC;QAC5D,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,SAAS,KAAK,CACZ,KAAyB,EACzB,QAAgB,EAChB,GAAW,EACX,GAAW;IAEX,MAAM,CAAC,GAAG,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5E,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const
|
|
3
|
+
exports.runLookup = runLookup;
|
|
4
|
+
const runDetails_1 = require("./runDetails");
|
|
5
5
|
// One file should not crowd out the rest of the ranking, so cap hits per file.
|
|
6
6
|
const PER_FILE = 3;
|
|
7
|
-
const DEFAULT_LIMIT =
|
|
7
|
+
const DEFAULT_LIMIT = 5;
|
|
8
|
+
const MAX_LIMIT = 6;
|
|
8
9
|
/**
|
|
9
10
|
* Rank the graph's symbols against a natural query. Scoring blends exact and
|
|
10
11
|
* dotted-name matches, CamelCase/subword coverage, file-path terms, a prefix
|
|
@@ -12,30 +13,37 @@ const DEFAULT_LIMIT = 12;
|
|
|
12
13
|
* nodes and caps per file so the result is a diverse, relevant shortlist rather
|
|
13
14
|
* than one file's roster.
|
|
14
15
|
*/
|
|
15
|
-
function
|
|
16
|
+
function runLookup(graph, props) {
|
|
16
17
|
const terms = subwords(props.query);
|
|
18
|
+
const codeTerms = exactCodeTerms(props.query);
|
|
19
|
+
const requestedKinds = requestedSymbolKinds(props.query);
|
|
17
20
|
const queryLc = props.query.trim().toLowerCase();
|
|
21
|
+
const wantsInternal = wantsInternalSymbol(queryLc, codeTerms);
|
|
18
22
|
if (terms.length === 0)
|
|
19
|
-
return { hits: [], next: {
|
|
23
|
+
return { type: "lookup", hits: [], next: { details: [], traceFrom: [] } };
|
|
20
24
|
const scored = [];
|
|
21
25
|
for (const node of graph.nodes) {
|
|
22
26
|
if (node.kind === "file")
|
|
23
27
|
continue;
|
|
24
|
-
const score = scoreNode(graph, node, queryLc, terms);
|
|
28
|
+
const score = scoreNode(graph, node, queryLc, terms, codeTerms, requestedKinds, wantsInternal);
|
|
25
29
|
if (score <= 0)
|
|
26
30
|
continue;
|
|
27
|
-
|
|
31
|
+
const hit = {
|
|
28
32
|
id: node.id,
|
|
29
33
|
name: node.qualifiedName ?? node.name,
|
|
30
34
|
kind: node.kind,
|
|
31
35
|
file: node.file,
|
|
32
36
|
line: node.evidence?.startLine,
|
|
33
37
|
score: Math.round(score),
|
|
34
|
-
}
|
|
38
|
+
};
|
|
39
|
+
const decorators = (0, runDetails_1.decoratorsOf)(node);
|
|
40
|
+
if (decorators !== undefined)
|
|
41
|
+
hit.decorators = decorators;
|
|
42
|
+
scored.push(hit);
|
|
35
43
|
}
|
|
36
44
|
scored.sort((a, b) => b.score - a.score);
|
|
37
45
|
// Diversity: keep at most PER_FILE hits per file while filling up to the limit.
|
|
38
|
-
const limit =
|
|
46
|
+
const limit = bound(props.limit, DEFAULT_LIMIT, 1, MAX_LIMIT);
|
|
39
47
|
const perFile = new Map();
|
|
40
48
|
const hits = [];
|
|
41
49
|
for (const hit of scored) {
|
|
@@ -47,20 +55,27 @@ function runQuery(graph, props) {
|
|
|
47
55
|
if (hits.length >= limit)
|
|
48
56
|
break;
|
|
49
57
|
}
|
|
50
|
-
// Attach each kept hit's signature
|
|
51
|
-
//
|
|
58
|
+
// Attach each kept hit's signature only for the shortlist, so the model can
|
|
59
|
+
// often answer from lookup alone without a details call.
|
|
52
60
|
for (const hit of hits) {
|
|
53
61
|
const node = graph.node(hit.id);
|
|
54
62
|
if (node === undefined)
|
|
55
63
|
continue;
|
|
56
|
-
const sig = (0,
|
|
64
|
+
const sig = (0, runDetails_1.signatureOf)(graph.project, node);
|
|
57
65
|
if (sig !== undefined)
|
|
58
66
|
hit.signature = sig;
|
|
59
67
|
}
|
|
60
|
-
return {
|
|
68
|
+
return {
|
|
69
|
+
type: "lookup",
|
|
70
|
+
hits,
|
|
71
|
+
next: {
|
|
72
|
+
details: hits.map((hit) => hit.id),
|
|
73
|
+
traceFrom: hits.map((hit) => hit.id),
|
|
74
|
+
},
|
|
75
|
+
};
|
|
61
76
|
}
|
|
62
77
|
/** Score one node against the query; 0 means no match. */
|
|
63
|
-
function scoreNode(graph, node, queryLc, terms) {
|
|
78
|
+
function scoreNode(graph, node, queryLc, terms, codeTerms, requestedKinds, wantsInternal) {
|
|
64
79
|
const name = node.name.toLowerCase();
|
|
65
80
|
const qualified = (node.qualifiedName ?? node.name).toLowerCase();
|
|
66
81
|
const nameSubs = subwords(node.name);
|
|
@@ -76,6 +91,19 @@ function scoreNode(graph, node, queryLc, terms) {
|
|
|
76
91
|
else if (queryLc.includes(".") && qualified.includes(queryLc)) {
|
|
77
92
|
score += 60;
|
|
78
93
|
}
|
|
94
|
+
for (const codeTerm of codeTerms) {
|
|
95
|
+
if (name === codeTerm || qualified === codeTerm) {
|
|
96
|
+
score += 110;
|
|
97
|
+
}
|
|
98
|
+
else if (qualified.endsWith(`.${codeTerm}`)) {
|
|
99
|
+
score += 95;
|
|
100
|
+
}
|
|
101
|
+
else if (codeTerm.includes(".") && qualified.endsWith(codeTerm)) {
|
|
102
|
+
score += 85;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (requestedKinds.has(node.kind))
|
|
106
|
+
score += 16;
|
|
79
107
|
let covered = 0;
|
|
80
108
|
for (const term of terms) {
|
|
81
109
|
if (nameSubs.includes(term)) {
|
|
@@ -111,8 +139,63 @@ function scoreNode(graph, node, queryLc, terms) {
|
|
|
111
139
|
score *= 0.3;
|
|
112
140
|
if (isTestFile(node.file))
|
|
113
141
|
score *= 0.7;
|
|
142
|
+
if (!wantsInternal && isInternalish(node))
|
|
143
|
+
score *= 0.82;
|
|
114
144
|
return score;
|
|
115
145
|
}
|
|
146
|
+
function wantsInternalSymbol(queryLc, codeTerms) {
|
|
147
|
+
return (/\b(internal|private|implementation|impl)\b/.test(queryLc) ||
|
|
148
|
+
codeTerms.some((term) => term.startsWith("_") || term.includes("internal")));
|
|
149
|
+
}
|
|
150
|
+
function isInternalish(node) {
|
|
151
|
+
const name = node.qualifiedName ?? node.name;
|
|
152
|
+
return (name.startsWith("_") ||
|
|
153
|
+
name.includes("._") ||
|
|
154
|
+
subwords(name).some((word) => word === "internal" || word === "internals"));
|
|
155
|
+
}
|
|
156
|
+
function exactCodeTerms(query) {
|
|
157
|
+
const out = new Set();
|
|
158
|
+
for (const match of query.matchAll(/`([^`]+)`/g)) {
|
|
159
|
+
const normalized = normalizeCodeTerm(match[1] ?? "");
|
|
160
|
+
if (normalized !== undefined)
|
|
161
|
+
out.add(normalized);
|
|
162
|
+
}
|
|
163
|
+
for (const match of query.matchAll(/\b([A-Za-z_$][\w$]*)\s+(method|function|class|interface|type|variable)\b/gi)) {
|
|
164
|
+
const normalized = normalizeCodeTerm(match[1] ?? "");
|
|
165
|
+
if (normalized !== undefined)
|
|
166
|
+
out.add(normalized);
|
|
167
|
+
}
|
|
168
|
+
for (const match of query.matchAll(/\b[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)+\b/g)) {
|
|
169
|
+
const normalized = normalizeCodeTerm(match[0]);
|
|
170
|
+
if (normalized !== undefined)
|
|
171
|
+
out.add(normalized);
|
|
172
|
+
}
|
|
173
|
+
return [...out];
|
|
174
|
+
}
|
|
175
|
+
function requestedSymbolKinds(query) {
|
|
176
|
+
const kinds = new Set();
|
|
177
|
+
const lc = query.toLowerCase();
|
|
178
|
+
if (/\bmethods?\b/.test(lc))
|
|
179
|
+
kinds.add("method");
|
|
180
|
+
if (/\bfunctions?\b/.test(lc)) {
|
|
181
|
+
kinds.add("function");
|
|
182
|
+
kinds.add("method");
|
|
183
|
+
kinds.add("variable");
|
|
184
|
+
}
|
|
185
|
+
if (/\bclasses?\b/.test(lc))
|
|
186
|
+
kinds.add("class");
|
|
187
|
+
if (/\binterfaces?\b/.test(lc))
|
|
188
|
+
kinds.add("interface");
|
|
189
|
+
if (/\btypes?\b/.test(lc))
|
|
190
|
+
kinds.add("type");
|
|
191
|
+
if (/\bvariables?\b|\bconst\b|\blet\b/.test(lc))
|
|
192
|
+
kinds.add("variable");
|
|
193
|
+
return kinds;
|
|
194
|
+
}
|
|
195
|
+
function normalizeCodeTerm(raw) {
|
|
196
|
+
const value = raw.trim().toLowerCase();
|
|
197
|
+
return /^[a-z_$][\w$]*(?:\.[a-z_$][\w$]*)*$/.test(value) ? value : undefined;
|
|
198
|
+
}
|
|
116
199
|
/** Non-structural in+out degree (code dependency, not nesting). */
|
|
117
200
|
function degree(graph, id) {
|
|
118
201
|
let n = 0;
|
|
@@ -131,6 +214,10 @@ function isTestFile(file) {
|
|
|
131
214
|
return (/(^|\/)(test|tests|__tests__|spec)\//.test(file) ||
|
|
132
215
|
/\.(test|spec)\.[cm]?tsx?$/.test(file));
|
|
133
216
|
}
|
|
217
|
+
function bound(value, fallback, min, max) {
|
|
218
|
+
const n = value === undefined || !Number.isFinite(value) ? fallback : value;
|
|
219
|
+
return Math.max(min, Math.min(max, Math.floor(n)));
|
|
220
|
+
}
|
|
134
221
|
/**
|
|
135
222
|
* Split an identifier or phrase into lowercase subword tokens: CamelCase,
|
|
136
223
|
* snake, dotted, and space boundaries all break, so `getHTTPResponse`,
|
|
@@ -144,4 +231,4 @@ function subwords(text) {
|
|
|
144
231
|
.filter((w) => w.length > 0)
|
|
145
232
|
.map((w) => w.toLowerCase());
|
|
146
233
|
}
|
|
147
|
-
//# sourceMappingURL=
|
|
234
|
+
//# sourceMappingURL=runLookup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runLookup.js","sourceRoot":"","sources":["../../src/server/runLookup.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,7 @@ function runOverview(graph, props) {
|
|
|
21
21
|
files++;
|
|
22
22
|
}
|
|
23
23
|
const result = {
|
|
24
|
+
type: "overview",
|
|
24
25
|
project: graph.project,
|
|
25
26
|
counts: {
|
|
26
27
|
files,
|
|
@@ -60,11 +61,11 @@ function layers(graph) {
|
|
|
60
61
|
exported: entry.exported,
|
|
61
62
|
}))
|
|
62
63
|
.sort((a, b) => b.files - a.files)
|
|
63
|
-
.slice(0,
|
|
64
|
+
.slice(0, 10);
|
|
64
65
|
}
|
|
65
66
|
/**
|
|
66
67
|
* The symbols at the center of the dependency graph, ranked by real fan-in and
|
|
67
|
-
* fan-out
|
|
68
|
+
* fan-out. Structural `contains`/`exports`/`imports` edges are excluded so the
|
|
68
69
|
* ranking reflects code dependency, not nesting.
|
|
69
70
|
*/
|
|
70
71
|
function hotspots(graph) {
|
|
@@ -79,16 +80,13 @@ function hotspots(graph) {
|
|
|
79
80
|
return graph.nodes
|
|
80
81
|
.filter((node) => !node.external && node.kind !== "file")
|
|
81
82
|
.map((node) => ({
|
|
82
|
-
|
|
83
|
-
name: node.qualifiedName ?? node.name,
|
|
84
|
-
kind: node.kind,
|
|
85
|
-
file: node.file,
|
|
83
|
+
...nodeOf(node),
|
|
86
84
|
fanIn: real(node.id, "in"),
|
|
87
85
|
fanOut: real(node.id, "out"),
|
|
88
86
|
}))
|
|
89
87
|
.filter((h) => h.fanIn + h.fanOut > 0)
|
|
90
88
|
.sort((a, b) => b.fanIn + b.fanOut - (a.fanIn + a.fanOut))
|
|
91
|
-
.slice(0,
|
|
89
|
+
.slice(0, 10);
|
|
92
90
|
}
|
|
93
91
|
/** Declaration kinds that make up a meaningful public API surface. */
|
|
94
92
|
const API_KINDS = new Set([
|
|
@@ -99,12 +97,13 @@ const API_KINDS = new Set([
|
|
|
99
97
|
"enum",
|
|
100
98
|
]);
|
|
101
99
|
/**
|
|
102
|
-
* The exported API surface: the exported symbols a consumer of the project
|
|
103
|
-
* use, ranked by how depended-on each is (real fan-in/out, structural
|
|
104
|
-
* excluded). Ranking by dependency rather than by which file declares the
|
|
105
|
-
* exports surfaces the load-bearing types (a DataSource, a
|
|
106
|
-
* instead of whichever file bundles the most type aliases;
|
|
107
|
-
* generated files are dropped so they cannot crowd the real
|
|
100
|
+
* The exported API surface: the exported symbols a consumer of the project
|
|
101
|
+
* would use, ranked by how depended-on each is (real fan-in/out, structural
|
|
102
|
+
* edges excluded). Ranking by dependency rather than by which file declares the
|
|
103
|
+
* most exports surfaces the load-bearing types (a DataSource, a
|
|
104
|
+
* SelectQueryBuilder) instead of whichever file bundles the most type aliases;
|
|
105
|
+
* test, typings, and generated files are dropped so they cannot crowd the real
|
|
106
|
+
* surface out.
|
|
108
107
|
*/
|
|
109
108
|
function publicApi(graph) {
|
|
110
109
|
const degree = (id) => {
|
|
@@ -121,20 +120,18 @@ function publicApi(graph) {
|
|
|
121
120
|
.exported()
|
|
122
121
|
.filter((node) => API_KINDS.has(node.kind) && !isNoiseFile(node.file))
|
|
123
122
|
.map((node) => ({
|
|
124
|
-
|
|
125
|
-
kind: node.kind,
|
|
126
|
-
file: node.file,
|
|
123
|
+
node: nodeOf(node),
|
|
127
124
|
degree: degree(node.id),
|
|
128
125
|
}))
|
|
129
126
|
.sort((a, b) => b.degree - a.degree)
|
|
130
|
-
.slice(0,
|
|
131
|
-
.map((
|
|
127
|
+
.slice(0, 15)
|
|
128
|
+
.map((ranked) => ranked.node);
|
|
132
129
|
}
|
|
133
130
|
/**
|
|
134
131
|
* A file whose exports are noise for an architecture overview: a test, a
|
|
135
|
-
* dependency's bundled `.d.ts`/typings, or generated output. The conventions
|
|
136
|
-
* universal (a `test`/`spec` path, a `typings` file), so excluding them is
|
|
137
|
-
* framework-specific
|
|
132
|
+
* dependency's bundled `.d.ts`/typings, or generated output. The conventions
|
|
133
|
+
* are universal (a `test`/`spec` path, a `typings` file), so excluding them is
|
|
134
|
+
* not framework-specific; it keeps the API surface to authored, used code.
|
|
138
135
|
*/
|
|
139
136
|
function isNoiseFile(file) {
|
|
140
137
|
return (/(^|\/)(test|tests|__tests__|spec|sample|samples)\//.test(file) ||
|
|
@@ -147,4 +144,17 @@ function dirname(file) {
|
|
|
147
144
|
const slash = file.lastIndexOf("/");
|
|
148
145
|
return slash >= 0 ? file.slice(0, slash) : ".";
|
|
149
146
|
}
|
|
147
|
+
/** Stable symbol coordinate shared by overview facets. */
|
|
148
|
+
function nodeOf(node) {
|
|
149
|
+
const out = {
|
|
150
|
+
id: node.id,
|
|
151
|
+
name: node.qualifiedName ?? node.name,
|
|
152
|
+
kind: node.kind,
|
|
153
|
+
file: node.file,
|
|
154
|
+
};
|
|
155
|
+
if (node.evidence?.startLine !== undefined) {
|
|
156
|
+
out.line = node.evidence.startLine;
|
|
157
|
+
}
|
|
158
|
+
return out;
|
|
159
|
+
}
|
|
150
160
|
//# sourceMappingURL=runOverview.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runOverview.js","sourceRoot":"","sources":["../../src/server/runOverview.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"runOverview.js","sourceRoot":"","sources":["../../src/server/runOverview.ts"],"names":[],"mappings":"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"}
|