@rawsql-ts/sql-grep-core 0.1.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.
@@ -0,0 +1,321 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.analyzeTableUsage = analyzeTableUsage;
4
+ const rawsql_ts_1 = require("rawsql-ts");
5
+ const rawsql_ts_2 = require("rawsql-ts");
6
+ const location_1 = require("./location");
7
+ /**
8
+ * Analyze table usage for a single statement using AST-first traversal.
9
+ */
10
+ function analyzeTableUsage(params) {
11
+ let parsed;
12
+ try {
13
+ parsed = rawsql_ts_1.SqlParser.parse(params.statement.statementText);
14
+ }
15
+ catch (error) {
16
+ return {
17
+ matches: [],
18
+ warnings: [
19
+ {
20
+ catalog_id: params.statement.catalogId,
21
+ query_id: params.statement.queryId,
22
+ sql_file: params.statement.sqlFile,
23
+ code: 'parse-failed',
24
+ message: error instanceof Error ? error.message : String(error)
25
+ }
26
+ ]
27
+ };
28
+ }
29
+ const occurrences = collectTableOccurrences(parsed, params.target, params.mode);
30
+ return {
31
+ matches: occurrences.map((occurrence) => toTableMatch(params.statement, occurrence)),
32
+ warnings: []
33
+ };
34
+ }
35
+ function collectTableOccurrences(parsed, target, mode, context = {}) {
36
+ if (parsed instanceof rawsql_ts_1.SimpleSelectQuery) {
37
+ const matches = [];
38
+ if (parsed.withClause) {
39
+ for (const table of parsed.withClause.tables) {
40
+ matches.push(...collectTableOccurrences(table.query, target, mode, { inCte: true }));
41
+ }
42
+ }
43
+ for (const item of parsed.selectClause.items) {
44
+ matches.push(...collectExpressionQueryOccurrences(item.value, target, mode, context));
45
+ }
46
+ if (parsed.fromClause) {
47
+ matches.push(...collectFromClauseOccurrences(parsed.fromClause, target, mode, context));
48
+ }
49
+ if (parsed.whereClause) {
50
+ matches.push(...collectExpressionQueryOccurrences(parsed.whereClause.condition, target, mode, context));
51
+ }
52
+ if (parsed.havingClause) {
53
+ matches.push(...collectExpressionQueryOccurrences(parsed.havingClause.condition, target, mode, context));
54
+ }
55
+ if (parsed.groupByClause) {
56
+ for (const group of parsed.groupByClause.grouping) {
57
+ matches.push(...collectExpressionQueryOccurrences(group, target, mode, context));
58
+ }
59
+ }
60
+ if (parsed.orderByClause) {
61
+ for (const order of parsed.orderByClause.order) {
62
+ matches.push(...collectExpressionQueryOccurrences(order instanceof rawsql_ts_1.OrderByItem ? order.value : order, target, mode, context));
63
+ }
64
+ }
65
+ return matches;
66
+ }
67
+ if (parsed instanceof rawsql_ts_1.UpdateQuery) {
68
+ const matches = [];
69
+ if (parsed.withClause) {
70
+ for (const table of parsed.withClause.tables) {
71
+ matches.push(...collectTableOccurrences(table.query, target, mode, { inCte: true }));
72
+ }
73
+ }
74
+ matches.push(...collectSourceExpressionOccurrences(parsed.updateClause.source, target, mode, context, 'update-target'));
75
+ if (parsed.fromClause) {
76
+ matches.push(...collectFromClauseOccurrences(parsed.fromClause, target, mode, context));
77
+ }
78
+ if (parsed.whereClause) {
79
+ matches.push(...collectExpressionQueryOccurrences(parsed.whereClause.condition, target, mode, context));
80
+ }
81
+ for (const item of parsed.setClause.items) {
82
+ matches.push(...collectExpressionQueryOccurrences(item.value, target, mode, context));
83
+ }
84
+ return matches;
85
+ }
86
+ if (parsed instanceof rawsql_ts_1.DeleteQuery) {
87
+ const matches = [];
88
+ if (parsed.withClause) {
89
+ for (const table of parsed.withClause.tables) {
90
+ matches.push(...collectTableOccurrences(table.query, target, mode, { inCte: true }));
91
+ }
92
+ }
93
+ matches.push(...collectSourceExpressionOccurrences(parsed.deleteClause.source, target, mode, context, 'delete-target'));
94
+ if (parsed.usingClause) {
95
+ matches.push(...collectUsingOccurrences(parsed.usingClause, target, mode, context));
96
+ }
97
+ if (parsed.whereClause) {
98
+ matches.push(...collectExpressionQueryOccurrences(parsed.whereClause.condition, target, mode, context));
99
+ }
100
+ return matches;
101
+ }
102
+ if (parsed instanceof rawsql_ts_1.InsertQuery) {
103
+ const matches = [];
104
+ matches.push(...collectSourceExpressionOccurrences(parsed.insertClause.source, target, mode, context, 'insert-target'));
105
+ if (parsed.selectQuery) {
106
+ matches.push(...collectTableOccurrences(parsed.selectQuery, target, mode, { inSubquery: true }));
107
+ }
108
+ return matches;
109
+ }
110
+ return [];
111
+ }
112
+ function collectFromClauseOccurrences(fromClause, target, mode, context) {
113
+ const usageKind = context.inCte ? 'cte-body-from' : context.inSubquery ? 'subquery-from' : 'from';
114
+ const matches = collectSourceExpressionOccurrences(fromClause.source, target, mode, context, usageKind);
115
+ if (fromClause.joins) {
116
+ for (const join of fromClause.joins) {
117
+ matches.push(...collectJoinOccurrences(join, target, mode, context));
118
+ }
119
+ }
120
+ return matches;
121
+ }
122
+ function collectJoinOccurrences(join, target, mode, context) {
123
+ const usageKind = context.inCte ? 'cte-body-from' : context.inSubquery ? 'subquery-from' : 'join';
124
+ return collectSourceExpressionOccurrences(join.source, target, mode, context, usageKind);
125
+ }
126
+ function collectUsingOccurrences(usingClause, target, mode, context) {
127
+ return usingClause.getSources().flatMap((source) => collectSourceExpressionOccurrences(source, target, mode, context, 'using'));
128
+ }
129
+ function collectExpressionQueryOccurrences(value, target, mode, context) {
130
+ if (value instanceof rawsql_ts_1.InlineQuery) {
131
+ return collectTableOccurrences(value.selectQuery, target, mode, { ...context, inSubquery: true });
132
+ }
133
+ if (value instanceof rawsql_ts_1.ArrayQueryExpression) {
134
+ return collectTableOccurrences(value.query, target, mode, { ...context, inSubquery: true });
135
+ }
136
+ if (value instanceof rawsql_ts_1.BinaryExpression) {
137
+ return [
138
+ ...collectExpressionQueryOccurrences(value.left, target, mode, context),
139
+ ...collectExpressionQueryOccurrences(value.right, target, mode, context)
140
+ ];
141
+ }
142
+ if (value instanceof rawsql_ts_1.UnaryExpression) {
143
+ return collectExpressionQueryOccurrences(value.expression, target, mode, context);
144
+ }
145
+ if (value instanceof rawsql_ts_1.FunctionCall) {
146
+ const matches = [];
147
+ if (value.argument) {
148
+ matches.push(...collectExpressionQueryOccurrences(value.argument, target, mode, context));
149
+ }
150
+ if (value.filterCondition) {
151
+ matches.push(...collectExpressionQueryOccurrences(value.filterCondition, target, mode, context));
152
+ }
153
+ if (value.internalOrderBy) {
154
+ for (const order of value.internalOrderBy.order) {
155
+ matches.push(...collectExpressionQueryOccurrences(order instanceof rawsql_ts_1.OrderByItem ? order.value : order, target, mode, context));
156
+ }
157
+ }
158
+ return matches;
159
+ }
160
+ if (value instanceof rawsql_ts_1.CastExpression) {
161
+ return collectExpressionQueryOccurrences(value.input, target, mode, context);
162
+ }
163
+ if (value instanceof rawsql_ts_1.ParenExpression) {
164
+ return collectExpressionQueryOccurrences(value.expression, target, mode, context);
165
+ }
166
+ if (value instanceof rawsql_ts_1.ArrayExpression) {
167
+ return collectExpressionQueryOccurrences(value.expression, target, mode, context);
168
+ }
169
+ if (value instanceof rawsql_ts_1.ArraySliceExpression) {
170
+ return [
171
+ ...collectExpressionQueryOccurrences(value.array, target, mode, context),
172
+ ...(value.startIndex ? collectExpressionQueryOccurrences(value.startIndex, target, mode, context) : []),
173
+ ...(value.endIndex ? collectExpressionQueryOccurrences(value.endIndex, target, mode, context) : [])
174
+ ];
175
+ }
176
+ if (value instanceof rawsql_ts_1.ArrayIndexExpression) {
177
+ return [
178
+ ...collectExpressionQueryOccurrences(value.array, target, mode, context),
179
+ ...collectExpressionQueryOccurrences(value.index, target, mode, context)
180
+ ];
181
+ }
182
+ if (value instanceof rawsql_ts_1.ValueList) {
183
+ return value.values.flatMap((entry) => collectExpressionQueryOccurrences(entry, target, mode, context));
184
+ }
185
+ if (value instanceof rawsql_ts_1.BetweenExpression) {
186
+ return [
187
+ ...collectExpressionQueryOccurrences(value.expression, target, mode, context),
188
+ ...collectExpressionQueryOccurrences(value.lower, target, mode, context),
189
+ ...collectExpressionQueryOccurrences(value.upper, target, mode, context)
190
+ ];
191
+ }
192
+ if (value instanceof rawsql_ts_1.CaseExpression) {
193
+ return [
194
+ ...(value.condition ? collectExpressionQueryOccurrences(value.condition, target, mode, context) : []),
195
+ ...collectExpressionQueryOccurrences(value.switchCase, target, mode, context)
196
+ ];
197
+ }
198
+ if (value instanceof rawsql_ts_1.SwitchCaseArgument) {
199
+ return [
200
+ ...value.cases.flatMap((item) => collectExpressionQueryOccurrences(item, target, mode, context)),
201
+ ...(value.elseValue ? collectExpressionQueryOccurrences(value.elseValue, target, mode, context) : [])
202
+ ];
203
+ }
204
+ if (value instanceof rawsql_ts_1.CaseKeyValuePair) {
205
+ return [
206
+ ...collectExpressionQueryOccurrences(value.key, target, mode, context),
207
+ ...collectExpressionQueryOccurrences(value.value, target, mode, context)
208
+ ];
209
+ }
210
+ if (value instanceof rawsql_ts_1.TupleExpression) {
211
+ return value.values.flatMap((entry) => collectExpressionQueryOccurrences(entry, target, mode, context));
212
+ }
213
+ if (value instanceof rawsql_ts_1.StringSpecifierExpression || value instanceof rawsql_ts_1.IdentifierString || value instanceof rawsql_ts_1.RawString) {
214
+ return [];
215
+ }
216
+ return [];
217
+ }
218
+ function collectSourceExpressionOccurrences(source, target, mode, context, usageKind) {
219
+ if (source.datasource instanceof rawsql_ts_2.TableSource) {
220
+ const qualified = getQualifiedTable(source.datasource);
221
+ if (matchesTargetTable(qualified, target, mode)) {
222
+ return [{
223
+ usageKind,
224
+ searchTerms: buildTableSearchTerms({
225
+ ...target,
226
+ table: qualified.table,
227
+ schema: qualified.schema
228
+ }, mode),
229
+ confidence: mode === 'exact' ? 'high' : 'low',
230
+ notes: mode === 'exact' ? [] : ['relaxed-match-any-schema'],
231
+ clauseAnchor: resolveClauseAnchor(usageKind),
232
+ strongClauseMatch: mode === 'exact'
233
+ }];
234
+ }
235
+ return [];
236
+ }
237
+ if (source.datasource instanceof rawsql_ts_1.SubQuerySource) {
238
+ return collectTableOccurrences(source.datasource.query, target, mode, { ...context, inSubquery: true });
239
+ }
240
+ if (source.datasource instanceof rawsql_ts_1.ParenSource) {
241
+ return collectSourceExpressionOccurrences(new rawsql_ts_1.SourceExpression(source.datasource.source, source.aliasExpression), target, mode, context, usageKind);
242
+ }
243
+ return [];
244
+ }
245
+ function getQualifiedTable(source) {
246
+ var _a;
247
+ const schema = ((_a = source.namespaces) === null || _a === void 0 ? void 0 : _a.map((value) => value.name).join('.')) || undefined;
248
+ const table = source.table.name;
249
+ return {
250
+ schema,
251
+ table,
252
+ full: schema ? `${schema}.${table}` : table
253
+ };
254
+ }
255
+ function matchesTargetTable(table, target, mode) {
256
+ if (mode === 'exact') {
257
+ return target.schema !== undefined && target.table !== undefined && table.full.toLowerCase() === `${target.schema}.${target.table}`.toLowerCase();
258
+ }
259
+ return target.table !== undefined && table.table.toLowerCase() === target.table.toLowerCase();
260
+ }
261
+ function buildTableSearchTerms(target, mode) {
262
+ if (mode === 'exact') {
263
+ return target.schema && target.table ? [`${target.schema}.${target.table}`] : [];
264
+ }
265
+ if (mode === 'any-schema') {
266
+ return target.table ? [target.table] : [];
267
+ }
268
+ return target.table ? [target.table] : [];
269
+ }
270
+ function toTableMatch(statement, occurrence) {
271
+ const located = (0, location_1.locateUsageText)({
272
+ statementText: statement.statementText,
273
+ statementStartOffsetInFile: statement.statementStartOffsetInFile,
274
+ candidates: occurrence.searchTerms,
275
+ clauseAnchor: occurrence.clauseAnchor,
276
+ snippetMode: 'line'
277
+ });
278
+ const notes = [...occurrence.notes];
279
+ let confidence = occurrence.confidence;
280
+ if (located.ambiguous && !notes.includes('ambiguous-multiple-occurrences')) {
281
+ notes.push('ambiguous-multiple-occurrences');
282
+ confidence = 'low';
283
+ }
284
+ if (occurrence.strongClauseMatch && !located.ambiguous) {
285
+ confidence = 'high';
286
+ }
287
+ return {
288
+ kind: 'detail',
289
+ catalog_id: statement.catalogId,
290
+ query_id: statement.queryId,
291
+ statement_fingerprint: statement.statementFingerprint,
292
+ sql_file: statement.sqlFile,
293
+ usage_kind: occurrence.usageKind,
294
+ location: located.location,
295
+ snippet: located.snippet,
296
+ confidence,
297
+ notes: notes.sort(),
298
+ source: 'ast'
299
+ };
300
+ }
301
+ function resolveClauseAnchor(usageKind) {
302
+ switch (usageKind) {
303
+ case 'from':
304
+ case 'subquery-from':
305
+ case 'cte-body-from':
306
+ return { kind: usageKind, tokens: ['FROM'] };
307
+ case 'join':
308
+ return { kind: usageKind, tokens: ['JOIN'] };
309
+ case 'insert-target':
310
+ return { kind: usageKind, tokens: ['INSERT', 'INTO'] };
311
+ case 'update-target':
312
+ return { kind: usageKind, tokens: ['UPDATE'] };
313
+ case 'delete-target':
314
+ return { kind: usageKind, tokens: ['DELETE', 'FROM'] };
315
+ case 'using':
316
+ return { kind: usageKind, tokens: ['USING'] };
317
+ default:
318
+ return { kind: usageKind, tokens: ['FROM'] };
319
+ }
320
+ }
321
+ //# sourceMappingURL=analyzeTableUsage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzeTableUsage.js","sourceRoot":"","sources":["../../src/query/analyzeTableUsage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { QueryUsageMatch, QueryUsageReport, QueryUsageWarning } from './types';
2
+ /**
3
+ * Sort matches in a deterministic, machine-friendly order.
4
+ */
5
+ export declare function sortQueryUsageMatches(matches: QueryUsageMatch[]): QueryUsageMatch[];
6
+ /**
7
+ * Sort warnings in a deterministic order.
8
+ */
9
+ export declare function sortQueryUsageWarnings(warnings: QueryUsageWarning[]): QueryUsageWarning[];
10
+ /**
11
+ * Format query usage output for text or JSON output.
12
+ */
13
+ export declare function formatQueryUsageReport(report: QueryUsageReport, format: 'text' | 'json'): string;
14
+ export declare function applyQueryOutputControls(report: QueryUsageReport, options: {
15
+ limit?: number;
16
+ summaryOnly?: boolean;
17
+ }): QueryUsageReport;
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sortQueryUsageMatches = sortQueryUsageMatches;
4
+ exports.sortQueryUsageWarnings = sortQueryUsageWarnings;
5
+ exports.formatQueryUsageReport = formatQueryUsageReport;
6
+ exports.applyQueryOutputControls = applyQueryOutputControls;
7
+ /**
8
+ * Sort matches in a deterministic, machine-friendly order.
9
+ */
10
+ function sortQueryUsageMatches(matches) {
11
+ return [...matches].sort((a, b) => a.catalog_id.localeCompare(b.catalog_id) ||
12
+ a.sql_file.localeCompare(b.sql_file) ||
13
+ compareNullableNumber(getLocationStart(a), getLocationStart(b)) ||
14
+ a.query_id.localeCompare(b.query_id) ||
15
+ compareUsageKey(a).localeCompare(compareUsageKey(b)));
16
+ }
17
+ /**
18
+ * Sort warnings in a deterministic order.
19
+ */
20
+ function sortQueryUsageWarnings(warnings) {
21
+ return [...warnings].sort((a, b) => {
22
+ var _a, _b, _c, _d, _e, _f;
23
+ return ((_a = a.catalog_id) !== null && _a !== void 0 ? _a : '').localeCompare((_b = b.catalog_id) !== null && _b !== void 0 ? _b : '') ||
24
+ ((_c = a.query_id) !== null && _c !== void 0 ? _c : '').localeCompare((_d = b.query_id) !== null && _d !== void 0 ? _d : '') ||
25
+ ((_e = a.sql_file) !== null && _e !== void 0 ? _e : '').localeCompare((_f = b.sql_file) !== null && _f !== void 0 ? _f : '') ||
26
+ a.code.localeCompare(b.code) ||
27
+ a.message.localeCompare(b.message);
28
+ });
29
+ }
30
+ /**
31
+ * Format query usage output for text or JSON output.
32
+ */
33
+ function formatQueryUsageReport(report, format) {
34
+ var _a, _b, _c;
35
+ if (format === 'json') {
36
+ return `${JSON.stringify(report, null, 2)}\n`;
37
+ }
38
+ const lines = [
39
+ `mode: ${report.mode}`,
40
+ `view: ${report.view}`,
41
+ `target: ${report.target.kind} ${report.target.raw}`,
42
+ `catalogs: ${report.summary.catalogsScanned}`,
43
+ `statements: ${report.summary.statementsScanned}`,
44
+ `matches: ${report.summary.matches}`,
45
+ `fallback matches: ${report.summary.fallbackMatches}`,
46
+ `parse warnings: ${report.summary.parseWarnings}`,
47
+ `unresolved sql files: ${report.summary.unresolvedSqlFiles}`
48
+ ];
49
+ if (report.display) {
50
+ lines.push(`returned matches: ${report.display.returnedMatches}`);
51
+ lines.push(`returned warnings: ${report.display.returnedWarnings}`);
52
+ lines.push(`summary only: ${report.display.summaryOnly}`);
53
+ if (report.display.limit !== undefined) {
54
+ lines.push(`limit: ${report.display.limit}`);
55
+ }
56
+ lines.push(`truncated: ${report.display.truncated}`);
57
+ }
58
+ if (report.warnings.length > 0) {
59
+ lines.push('', 'Warnings:');
60
+ for (const warning of report.warnings) {
61
+ lines.push(`- [${warning.code}] ${((_a = warning.catalog_id) !== null && _a !== void 0 ? _a : '-')} ${((_b = warning.query_id) !== null && _b !== void 0 ? _b : '-')} ${((_c = warning.sql_file) !== null && _c !== void 0 ? _c : '-')}`);
62
+ lines.push(` ${warning.message}`);
63
+ }
64
+ }
65
+ if (report.view === 'impact') {
66
+ lines.push('', 'Affected queries:');
67
+ appendImpactMatches(lines, report.matches);
68
+ return `${lines.join('\n')}\n`;
69
+ }
70
+ const primary = report.matches.filter((match) => match.source === 'ast');
71
+ const fallback = report.matches.filter((match) => match.source === 'fallback');
72
+ lines.push('', 'Primary matches:');
73
+ appendDetailMatches(lines, primary);
74
+ lines.push('', 'Fallback-derived matches:');
75
+ appendDetailMatches(lines, fallback);
76
+ return `${lines.join('\n')}\n`;
77
+ }
78
+ function applyQueryOutputControls(report, options) {
79
+ const summaryOnly = Boolean(options.summaryOnly);
80
+ const limit = options.limit;
81
+ const totalMatches = report.matches.length;
82
+ const totalWarnings = report.warnings.length;
83
+ let matches = summaryOnly ? [] : report.matches;
84
+ let warnings = summaryOnly ? [] : report.warnings;
85
+ if (!summaryOnly && limit !== undefined) {
86
+ matches = matches.slice(0, limit);
87
+ warnings = warnings.slice(0, limit);
88
+ }
89
+ return {
90
+ ...report,
91
+ matches,
92
+ warnings,
93
+ display: {
94
+ summaryOnly,
95
+ limit,
96
+ totalMatches,
97
+ returnedMatches: matches.length,
98
+ totalWarnings,
99
+ returnedWarnings: warnings.length,
100
+ truncated: summaryOnly || matches.length < totalMatches || warnings.length < totalWarnings
101
+ }
102
+ };
103
+ }
104
+ function appendImpactMatches(lines, matches) {
105
+ if (matches.length === 0) {
106
+ lines.push('(none)');
107
+ return;
108
+ }
109
+ for (const match of matches) {
110
+ lines.push(`- ${match.catalog_id} ${match.query_id} ${match.confidence}`);
111
+ lines.push(` sql_file: ${match.sql_file}`);
112
+ lines.push(` statement_fingerprint: ${match.statement_fingerprint}`);
113
+ lines.push(` source: ${match.source}`);
114
+ lines.push(` usageKinds: ${formatUsageKindCounts(match.usageKindCounts)}`);
115
+ lines.push(` notes: ${match.notes.length > 0 ? match.notes.join(', ') : '(none)'}`);
116
+ }
117
+ }
118
+ function appendDetailMatches(lines, matches) {
119
+ if (matches.length === 0) {
120
+ lines.push('(none)');
121
+ return;
122
+ }
123
+ for (const match of matches) {
124
+ lines.push(`- ${match.catalog_id} ${match.query_id} ${match.usage_kind} ${match.confidence}`);
125
+ lines.push(` sql_file: ${match.sql_file}`);
126
+ lines.push(` statement_fingerprint: ${match.statement_fingerprint}`);
127
+ lines.push(` source: ${match.source}`);
128
+ lines.push(` snippet: ${match.snippet}`);
129
+ lines.push(` notes: ${match.notes.length > 0 ? match.notes.join(', ') : '(none)'}`);
130
+ lines.push(` exprHints: ${match.exprHints && match.exprHints.length > 0 ? match.exprHints.join(', ') : '(none)'}`);
131
+ lines.push(` location: ${formatLocation(match)}`);
132
+ }
133
+ }
134
+ function formatUsageKindCounts(value) {
135
+ return Object.keys(value)
136
+ .sort()
137
+ .map((usageKind) => `${usageKind}=${value[usageKind]}`)
138
+ .join(', ');
139
+ }
140
+ function formatLocation(match) {
141
+ if (!match.location) {
142
+ return '(unresolved)';
143
+ }
144
+ return `${match.location.startLine}:${match.location.startColumn}-${match.location.endLine}:${match.location.endColumn} @ ${match.location.fileOffsetStart}-${match.location.fileOffsetEnd}`;
145
+ }
146
+ function getLocationStart(match) {
147
+ var _a, _b, _c, _d;
148
+ if (match.kind === 'impact') {
149
+ return (_c = (_b = (_a = match.representatives) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.location) === null || _c === void 0 ? void 0 : _c.fileOffsetStart;
150
+ }
151
+ return (_d = match.location) === null || _d === void 0 ? void 0 : _d.fileOffsetStart;
152
+ }
153
+ function compareUsageKey(match) {
154
+ if (match.kind === 'impact') {
155
+ return Object.keys(match.usageKindCounts).sort().join(',');
156
+ }
157
+ return match.usage_kind;
158
+ }
159
+ function compareNullableNumber(left, right) {
160
+ if (left === undefined && right === undefined) {
161
+ return 0;
162
+ }
163
+ if (left === undefined) {
164
+ return 1;
165
+ }
166
+ if (right === undefined) {
167
+ return -1;
168
+ }
169
+ return left - right;
170
+ }
171
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/query/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { QueryUsageClauseAnchor, QueryUsageLocation } from './types';
2
+ interface LocatedText {
3
+ location: QueryUsageLocation | null;
4
+ snippet: string;
5
+ ambiguous: boolean;
6
+ }
7
+ export declare function clearStatementCache(): void;
8
+ /**
9
+ * Locate the best matching occurrence in a statement and project it to file-relative coordinates.
10
+ */
11
+ export declare function locateUsageText(params: {
12
+ statementText: string;
13
+ statementStartOffsetInFile: number;
14
+ candidates: string[];
15
+ clauseAnchor?: QueryUsageClauseAnchor;
16
+ snippetMode?: 'clause' | 'line';
17
+ }): LocatedText;
18
+ export {};