kmp-api-lookup-mcp 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +219 -0
- package/dist/config/index.d.ts +4 -0
- package/dist/config/index.js +33 -0
- package/dist/config/index.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/indexer/index.d.ts +12 -0
- package/dist/indexer/index.js +245 -0
- package/dist/indexer/index.js.map +1 -0
- package/dist/search-utils.d.ts +10 -0
- package/dist/search-utils.js +81 -0
- package/dist/search-utils.js.map +1 -0
- package/dist/server/createServer.d.ts +11 -0
- package/dist/server/createServer.js +30 -0
- package/dist/server/createServer.js.map +1 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.js +3 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/lookupDetail.d.ts +3 -0
- package/dist/server/lookupDetail.js +295 -0
- package/dist/server/lookupDetail.js.map +1 -0
- package/dist/server/lookupService.d.ts +34 -0
- package/dist/server/lookupService.js +822 -0
- package/dist/server/lookupService.js.map +1 -0
- package/dist/server/metadataInspector.d.ts +14 -0
- package/dist/server/metadataInspector.js +288 -0
- package/dist/server/metadataInspector.js.map +1 -0
- package/dist/storage/index.d.ts +58 -0
- package/dist/storage/index.js +554 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.js +488 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/types.d.ts +287 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,554 @@
|
|
|
1
|
+
import { mkdirSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import Database from 'better-sqlite3';
|
|
4
|
+
import { buildFtsQuery, compactSelector, escapeLikePattern, normalizeSelector, normalizeText, uniqueSorted, } from '../search-utils.js';
|
|
5
|
+
export class KlibIndexStorage {
|
|
6
|
+
config;
|
|
7
|
+
db;
|
|
8
|
+
constructor(config) {
|
|
9
|
+
this.config = config;
|
|
10
|
+
mkdirSync(path.dirname(config.dbPath), { recursive: true });
|
|
11
|
+
this.db = new Database(config.dbPath);
|
|
12
|
+
this.db.pragma('journal_mode = WAL');
|
|
13
|
+
this.db.pragma('foreign_keys = ON');
|
|
14
|
+
this.db.pragma('busy_timeout = 5000');
|
|
15
|
+
this.initializeSchema();
|
|
16
|
+
}
|
|
17
|
+
close() {
|
|
18
|
+
this.db.close();
|
|
19
|
+
}
|
|
20
|
+
listIndexedDatasets() {
|
|
21
|
+
const rows = this.db
|
|
22
|
+
.prepare(`
|
|
23
|
+
SELECT
|
|
24
|
+
d.kotlin_version,
|
|
25
|
+
i.konan_home,
|
|
26
|
+
d.target,
|
|
27
|
+
d.indexed_at,
|
|
28
|
+
d.record_count,
|
|
29
|
+
d.framework_count,
|
|
30
|
+
GROUP_CONCAT(f.name, ',') AS frameworks
|
|
31
|
+
FROM datasets d
|
|
32
|
+
JOIN installations i ON i.id = d.installation_id
|
|
33
|
+
LEFT JOIN frameworks f ON f.dataset_id = d.id
|
|
34
|
+
GROUP BY d.id
|
|
35
|
+
ORDER BY d.kotlin_version DESC, d.target ASC
|
|
36
|
+
`)
|
|
37
|
+
.all();
|
|
38
|
+
return rows.map((row) => ({
|
|
39
|
+
kotlinVersion: row.kotlin_version,
|
|
40
|
+
konanHome: row.konan_home,
|
|
41
|
+
target: row.target,
|
|
42
|
+
indexedAt: row.indexed_at,
|
|
43
|
+
recordCount: row.record_count,
|
|
44
|
+
frameworkCount: row.framework_count,
|
|
45
|
+
frameworks: row.frameworks ? uniqueSorted(row.frameworks.split(',')) : [],
|
|
46
|
+
}));
|
|
47
|
+
}
|
|
48
|
+
getRecordCounts() {
|
|
49
|
+
const row = this.db
|
|
50
|
+
.prepare(`
|
|
51
|
+
SELECT
|
|
52
|
+
(SELECT COUNT(*) FROM datasets) AS datasets,
|
|
53
|
+
(SELECT COUNT(*) FROM frameworks) AS frameworks,
|
|
54
|
+
(SELECT COUNT(*) FROM symbols) AS symbols
|
|
55
|
+
`)
|
|
56
|
+
.get();
|
|
57
|
+
return row;
|
|
58
|
+
}
|
|
59
|
+
getFrameworkSnapshots(konanHome, target, frameworkNames) {
|
|
60
|
+
if (frameworkNames.length === 0) {
|
|
61
|
+
return new Map();
|
|
62
|
+
}
|
|
63
|
+
const placeholders = frameworkNames.map(() => '?').join(', ');
|
|
64
|
+
const rows = this.db
|
|
65
|
+
.prepare(`
|
|
66
|
+
SELECT f.name, f.source_mtime_ms, f.symbol_count
|
|
67
|
+
FROM frameworks f
|
|
68
|
+
JOIN datasets d ON d.id = f.dataset_id
|
|
69
|
+
JOIN installations i ON i.id = d.installation_id
|
|
70
|
+
WHERE i.konan_home = ?
|
|
71
|
+
AND d.target = ?
|
|
72
|
+
AND f.name IN (${placeholders})
|
|
73
|
+
`)
|
|
74
|
+
.all(konanHome, target, ...frameworkNames);
|
|
75
|
+
return new Map(rows.map((row) => [
|
|
76
|
+
row.name,
|
|
77
|
+
{
|
|
78
|
+
sourceMtimeMs: row.source_mtime_ms,
|
|
79
|
+
symbolCount: row.symbol_count,
|
|
80
|
+
},
|
|
81
|
+
]));
|
|
82
|
+
}
|
|
83
|
+
writeFrameworkBatch(params) {
|
|
84
|
+
const transaction = this.db.transaction(() => {
|
|
85
|
+
const installationId = this.upsertInstallation(params.installation, params.indexedAt);
|
|
86
|
+
const datasetId = this.upsertDataset(installationId, params.installation.kotlinVersion, params.target, params.indexedAt);
|
|
87
|
+
for (const item of params.items) {
|
|
88
|
+
if (params.cleanBefore) {
|
|
89
|
+
this.deleteFrameworkData(datasetId, item.source.name);
|
|
90
|
+
}
|
|
91
|
+
const frameworkId = this.upsertFramework(datasetId, item, params.indexedAt);
|
|
92
|
+
for (const record of item.records) {
|
|
93
|
+
this.upsertSymbol({
|
|
94
|
+
datasetId,
|
|
95
|
+
frameworkId,
|
|
96
|
+
kotlinVersion: params.installation.kotlinVersion,
|
|
97
|
+
konanHome: params.installation.konanHome,
|
|
98
|
+
target: params.target,
|
|
99
|
+
framework: item.source.name,
|
|
100
|
+
record,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
this.syncFrameworkSearchIndex(datasetId, item.source.name);
|
|
104
|
+
this.refreshFrameworkStats(datasetId, item.source.name, item.lineCount, params.indexedAt);
|
|
105
|
+
}
|
|
106
|
+
this.refreshDatasetStats(datasetId, params.indexedAt);
|
|
107
|
+
return params.items.reduce((total, item) => total + item.records.length, 0);
|
|
108
|
+
});
|
|
109
|
+
return transaction();
|
|
110
|
+
}
|
|
111
|
+
searchSymbols(query) {
|
|
112
|
+
const results = [];
|
|
113
|
+
const seenIds = new Set();
|
|
114
|
+
const stages = resolveStages(query.matchMode);
|
|
115
|
+
for (const stage of stages) {
|
|
116
|
+
if (results.length >= query.limit) {
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
const stageResults = this.queryStage(stage, query, query.limit - results.length);
|
|
120
|
+
for (const result of stageResults) {
|
|
121
|
+
if (seenIds.has(result.id)) {
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
seenIds.add(result.id);
|
|
125
|
+
results.push(result);
|
|
126
|
+
if (results.length >= query.limit) {
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return results;
|
|
132
|
+
}
|
|
133
|
+
initializeSchema() {
|
|
134
|
+
this.db.exec(`
|
|
135
|
+
CREATE TABLE IF NOT EXISTS installations (
|
|
136
|
+
id INTEGER PRIMARY KEY,
|
|
137
|
+
kotlin_version TEXT NOT NULL,
|
|
138
|
+
konan_home TEXT NOT NULL UNIQUE,
|
|
139
|
+
source TEXT NOT NULL,
|
|
140
|
+
discovered_at TEXT NOT NULL
|
|
141
|
+
);
|
|
142
|
+
|
|
143
|
+
CREATE TABLE IF NOT EXISTS datasets (
|
|
144
|
+
id INTEGER PRIMARY KEY,
|
|
145
|
+
installation_id INTEGER NOT NULL REFERENCES installations(id) ON DELETE CASCADE,
|
|
146
|
+
kotlin_version TEXT NOT NULL,
|
|
147
|
+
target TEXT NOT NULL,
|
|
148
|
+
indexed_at TEXT NOT NULL,
|
|
149
|
+
record_count INTEGER NOT NULL DEFAULT 0,
|
|
150
|
+
framework_count INTEGER NOT NULL DEFAULT 0,
|
|
151
|
+
UNIQUE(installation_id, target)
|
|
152
|
+
);
|
|
153
|
+
|
|
154
|
+
CREATE TABLE IF NOT EXISTS frameworks (
|
|
155
|
+
id INTEGER PRIMARY KEY,
|
|
156
|
+
dataset_id INTEGER NOT NULL REFERENCES datasets(id) ON DELETE CASCADE,
|
|
157
|
+
name TEXT NOT NULL,
|
|
158
|
+
source_path TEXT NOT NULL,
|
|
159
|
+
source_mtime_ms REAL NOT NULL,
|
|
160
|
+
line_count INTEGER NOT NULL,
|
|
161
|
+
symbol_count INTEGER NOT NULL,
|
|
162
|
+
indexed_at TEXT NOT NULL,
|
|
163
|
+
UNIQUE(dataset_id, name)
|
|
164
|
+
);
|
|
165
|
+
|
|
166
|
+
CREATE TABLE IF NOT EXISTS symbols (
|
|
167
|
+
id INTEGER PRIMARY KEY,
|
|
168
|
+
dataset_id INTEGER NOT NULL REFERENCES datasets(id) ON DELETE CASCADE,
|
|
169
|
+
framework_id INTEGER NOT NULL REFERENCES frameworks(id) ON DELETE CASCADE,
|
|
170
|
+
kotlin_version TEXT NOT NULL,
|
|
171
|
+
konan_home TEXT NOT NULL,
|
|
172
|
+
target TEXT NOT NULL,
|
|
173
|
+
framework TEXT NOT NULL,
|
|
174
|
+
package_name TEXT NOT NULL,
|
|
175
|
+
class_name TEXT,
|
|
176
|
+
member_name TEXT NOT NULL,
|
|
177
|
+
member_name_normalized TEXT NOT NULL,
|
|
178
|
+
objc_selector TEXT,
|
|
179
|
+
objc_selector_normalized TEXT,
|
|
180
|
+
objc_selector_compact TEXT,
|
|
181
|
+
raw_signature TEXT NOT NULL,
|
|
182
|
+
raw_signature_lower TEXT NOT NULL,
|
|
183
|
+
searchable_text TEXT NOT NULL,
|
|
184
|
+
member_kind TEXT NOT NULL,
|
|
185
|
+
is_meta_class INTEGER NOT NULL DEFAULT 0,
|
|
186
|
+
UNIQUE(dataset_id, framework, raw_signature)
|
|
187
|
+
);
|
|
188
|
+
|
|
189
|
+
CREATE INDEX IF NOT EXISTS idx_symbols_version_target ON symbols(kotlin_version, target);
|
|
190
|
+
CREATE INDEX IF NOT EXISTS idx_symbols_framework ON symbols(framework);
|
|
191
|
+
CREATE INDEX IF NOT EXISTS idx_symbols_member_name_normalized ON symbols(member_name_normalized);
|
|
192
|
+
CREATE INDEX IF NOT EXISTS idx_symbols_objc_selector_normalized ON symbols(objc_selector_normalized);
|
|
193
|
+
CREATE INDEX IF NOT EXISTS idx_symbols_objc_selector_compact ON symbols(objc_selector_compact);
|
|
194
|
+
|
|
195
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS symbol_search USING fts5(
|
|
196
|
+
symbol_id UNINDEXED,
|
|
197
|
+
dataset_id UNINDEXED,
|
|
198
|
+
framework,
|
|
199
|
+
package_name,
|
|
200
|
+
class_name,
|
|
201
|
+
member_name,
|
|
202
|
+
objc_selector,
|
|
203
|
+
raw_signature,
|
|
204
|
+
tokenize = 'unicode61 remove_diacritics 2'
|
|
205
|
+
);
|
|
206
|
+
`);
|
|
207
|
+
}
|
|
208
|
+
upsertInstallation(installation, discoveredAt) {
|
|
209
|
+
this.db
|
|
210
|
+
.prepare(`
|
|
211
|
+
INSERT INTO installations (kotlin_version, konan_home, source, discovered_at)
|
|
212
|
+
VALUES (?, ?, ?, ?)
|
|
213
|
+
ON CONFLICT(konan_home) DO UPDATE SET
|
|
214
|
+
kotlin_version = excluded.kotlin_version,
|
|
215
|
+
source = excluded.source,
|
|
216
|
+
discovered_at = excluded.discovered_at
|
|
217
|
+
`)
|
|
218
|
+
.run(installation.kotlinVersion, installation.konanHome, installation.sources.join(','), discoveredAt);
|
|
219
|
+
const row = this.db
|
|
220
|
+
.prepare('SELECT id FROM installations WHERE konan_home = ?')
|
|
221
|
+
.get(installation.konanHome);
|
|
222
|
+
return row.id;
|
|
223
|
+
}
|
|
224
|
+
upsertDataset(installationId, kotlinVersion, target, indexedAt) {
|
|
225
|
+
this.db
|
|
226
|
+
.prepare(`
|
|
227
|
+
INSERT INTO datasets (installation_id, kotlin_version, target, indexed_at, record_count, framework_count)
|
|
228
|
+
VALUES (?, ?, ?, ?, 0, 0)
|
|
229
|
+
ON CONFLICT(installation_id, target) DO UPDATE SET
|
|
230
|
+
kotlin_version = excluded.kotlin_version,
|
|
231
|
+
indexed_at = excluded.indexed_at
|
|
232
|
+
`)
|
|
233
|
+
.run(installationId, kotlinVersion, target, indexedAt);
|
|
234
|
+
const row = this.db
|
|
235
|
+
.prepare('SELECT id FROM datasets WHERE installation_id = ? AND target = ?')
|
|
236
|
+
.get(installationId, target);
|
|
237
|
+
return row.id;
|
|
238
|
+
}
|
|
239
|
+
upsertFramework(datasetId, item, indexedAt) {
|
|
240
|
+
this.db
|
|
241
|
+
.prepare(`
|
|
242
|
+
INSERT INTO frameworks (
|
|
243
|
+
dataset_id,
|
|
244
|
+
name,
|
|
245
|
+
source_path,
|
|
246
|
+
source_mtime_ms,
|
|
247
|
+
line_count,
|
|
248
|
+
symbol_count,
|
|
249
|
+
indexed_at
|
|
250
|
+
)
|
|
251
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
252
|
+
ON CONFLICT(dataset_id, name) DO UPDATE SET
|
|
253
|
+
source_path = excluded.source_path,
|
|
254
|
+
source_mtime_ms = excluded.source_mtime_ms,
|
|
255
|
+
line_count = excluded.line_count,
|
|
256
|
+
symbol_count = excluded.symbol_count,
|
|
257
|
+
indexed_at = excluded.indexed_at
|
|
258
|
+
`)
|
|
259
|
+
.run(datasetId, item.source.name, item.source.directoryPath, item.source.sourceMtimeMs, item.lineCount, item.records.length, indexedAt);
|
|
260
|
+
const row = this.db
|
|
261
|
+
.prepare('SELECT id FROM frameworks WHERE dataset_id = ? AND name = ?')
|
|
262
|
+
.get(datasetId, item.source.name);
|
|
263
|
+
return row.id;
|
|
264
|
+
}
|
|
265
|
+
upsertSymbol(params) {
|
|
266
|
+
this.db
|
|
267
|
+
.prepare(`
|
|
268
|
+
INSERT INTO symbols (
|
|
269
|
+
dataset_id,
|
|
270
|
+
framework_id,
|
|
271
|
+
kotlin_version,
|
|
272
|
+
konan_home,
|
|
273
|
+
target,
|
|
274
|
+
framework,
|
|
275
|
+
package_name,
|
|
276
|
+
class_name,
|
|
277
|
+
member_name,
|
|
278
|
+
member_name_normalized,
|
|
279
|
+
objc_selector,
|
|
280
|
+
objc_selector_normalized,
|
|
281
|
+
objc_selector_compact,
|
|
282
|
+
raw_signature,
|
|
283
|
+
raw_signature_lower,
|
|
284
|
+
searchable_text,
|
|
285
|
+
member_kind,
|
|
286
|
+
is_meta_class
|
|
287
|
+
)
|
|
288
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
289
|
+
ON CONFLICT(dataset_id, framework, raw_signature) DO UPDATE SET
|
|
290
|
+
framework_id = excluded.framework_id,
|
|
291
|
+
kotlin_version = excluded.kotlin_version,
|
|
292
|
+
konan_home = excluded.konan_home,
|
|
293
|
+
target = excluded.target,
|
|
294
|
+
package_name = excluded.package_name,
|
|
295
|
+
class_name = excluded.class_name,
|
|
296
|
+
member_name = excluded.member_name,
|
|
297
|
+
member_name_normalized = excluded.member_name_normalized,
|
|
298
|
+
objc_selector = excluded.objc_selector,
|
|
299
|
+
objc_selector_normalized = excluded.objc_selector_normalized,
|
|
300
|
+
objc_selector_compact = excluded.objc_selector_compact,
|
|
301
|
+
raw_signature_lower = excluded.raw_signature_lower,
|
|
302
|
+
searchable_text = excluded.searchable_text,
|
|
303
|
+
member_kind = excluded.member_kind,
|
|
304
|
+
is_meta_class = excluded.is_meta_class
|
|
305
|
+
`)
|
|
306
|
+
.run(params.datasetId, params.frameworkId, params.kotlinVersion, params.konanHome, params.target, params.framework, params.record.packageName, params.record.className, params.record.memberSearchName, normalizeText(params.record.memberSearchName), params.record.objcSelector, params.record.objcSelectorNormalized, params.record.objcSelectorCompact, params.record.rawSignature, params.record.rawSignature.toLowerCase(), buildSearchableText(params.record), params.record.memberKind, params.record.isMetaClass ? 1 : 0);
|
|
307
|
+
}
|
|
308
|
+
deleteFrameworkData(datasetId, frameworkName) {
|
|
309
|
+
this.db
|
|
310
|
+
.prepare('DELETE FROM symbol_search WHERE dataset_id = ? AND framework = ?')
|
|
311
|
+
.run(datasetId, frameworkName);
|
|
312
|
+
this.db
|
|
313
|
+
.prepare('DELETE FROM symbols WHERE dataset_id = ? AND framework = ?')
|
|
314
|
+
.run(datasetId, frameworkName);
|
|
315
|
+
this.db
|
|
316
|
+
.prepare('DELETE FROM frameworks WHERE dataset_id = ? AND name = ?')
|
|
317
|
+
.run(datasetId, frameworkName);
|
|
318
|
+
}
|
|
319
|
+
syncFrameworkSearchIndex(datasetId, frameworkName) {
|
|
320
|
+
this.db
|
|
321
|
+
.prepare('DELETE FROM symbol_search WHERE dataset_id = ? AND framework = ?')
|
|
322
|
+
.run(datasetId, frameworkName);
|
|
323
|
+
const rows = this.db
|
|
324
|
+
.prepare(`
|
|
325
|
+
SELECT id, dataset_id, framework, package_name, class_name, member_name, objc_selector, raw_signature
|
|
326
|
+
FROM symbols
|
|
327
|
+
WHERE dataset_id = ? AND framework = ?
|
|
328
|
+
`)
|
|
329
|
+
.all(datasetId, frameworkName);
|
|
330
|
+
const insertStatement = this.db.prepare(`
|
|
331
|
+
INSERT INTO symbol_search (
|
|
332
|
+
symbol_id,
|
|
333
|
+
dataset_id,
|
|
334
|
+
framework,
|
|
335
|
+
package_name,
|
|
336
|
+
class_name,
|
|
337
|
+
member_name,
|
|
338
|
+
objc_selector,
|
|
339
|
+
raw_signature
|
|
340
|
+
)
|
|
341
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
342
|
+
`);
|
|
343
|
+
for (const row of rows) {
|
|
344
|
+
insertStatement.run(row.id, row.dataset_id, row.framework, row.package_name, row.class_name ?? '', row.member_name, row.objc_selector ?? '', row.raw_signature);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
refreshFrameworkStats(datasetId, frameworkName, lineCount, indexedAt) {
|
|
348
|
+
const row = this.db
|
|
349
|
+
.prepare(`
|
|
350
|
+
SELECT COUNT(*) AS symbolCount
|
|
351
|
+
FROM symbols
|
|
352
|
+
WHERE dataset_id = ? AND framework = ?
|
|
353
|
+
`)
|
|
354
|
+
.get(datasetId, frameworkName);
|
|
355
|
+
this.db
|
|
356
|
+
.prepare(`
|
|
357
|
+
UPDATE frameworks
|
|
358
|
+
SET line_count = ?, symbol_count = ?, indexed_at = ?
|
|
359
|
+
WHERE dataset_id = ? AND name = ?
|
|
360
|
+
`)
|
|
361
|
+
.run(lineCount, row.symbolCount, indexedAt, datasetId, frameworkName);
|
|
362
|
+
}
|
|
363
|
+
refreshDatasetStats(datasetId, indexedAt) {
|
|
364
|
+
const row = this.db
|
|
365
|
+
.prepare(`
|
|
366
|
+
SELECT
|
|
367
|
+
(SELECT COUNT(*) FROM symbols WHERE dataset_id = ?) AS recordCount,
|
|
368
|
+
(SELECT COUNT(*) FROM frameworks WHERE dataset_id = ?) AS frameworkCount
|
|
369
|
+
`)
|
|
370
|
+
.get(datasetId, datasetId);
|
|
371
|
+
this.db
|
|
372
|
+
.prepare(`
|
|
373
|
+
UPDATE datasets
|
|
374
|
+
SET record_count = ?, framework_count = ?, indexed_at = ?
|
|
375
|
+
WHERE id = ?
|
|
376
|
+
`)
|
|
377
|
+
.run(row.recordCount, row.frameworkCount, indexedAt, datasetId);
|
|
378
|
+
}
|
|
379
|
+
queryStage(stage, query, limit) {
|
|
380
|
+
switch (stage) {
|
|
381
|
+
case 'exact':
|
|
382
|
+
return this.queryExact(query, limit);
|
|
383
|
+
case 'prefix':
|
|
384
|
+
return this.queryPrefix(query, limit);
|
|
385
|
+
case 'fts':
|
|
386
|
+
return this.queryFts(query, limit);
|
|
387
|
+
case 'fuzzy':
|
|
388
|
+
return this.queryFuzzy(query, limit);
|
|
389
|
+
default:
|
|
390
|
+
return [];
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
queryExact(query, limit) {
|
|
394
|
+
const filters = this.buildSymbolFilters(query, 'symbols');
|
|
395
|
+
const normalizedQuery = normalizeText(query.query);
|
|
396
|
+
const normalizedSelector = normalizeSelector(query.query) ?? normalizedQuery;
|
|
397
|
+
const compactQuery = compactSelector(query.query) ?? normalizedQuery;
|
|
398
|
+
const rows = this.db
|
|
399
|
+
.prepare(`
|
|
400
|
+
SELECT *
|
|
401
|
+
FROM symbols
|
|
402
|
+
WHERE ${filters.clause}
|
|
403
|
+
AND (
|
|
404
|
+
member_name_normalized = ?
|
|
405
|
+
OR objc_selector_normalized = ?
|
|
406
|
+
OR objc_selector_compact = ?
|
|
407
|
+
)
|
|
408
|
+
ORDER BY framework ASC, COALESCE(class_name, '') ASC, member_name ASC
|
|
409
|
+
LIMIT ?
|
|
410
|
+
`)
|
|
411
|
+
.all(...filters.params, normalizedQuery, normalizedSelector, compactQuery, limit);
|
|
412
|
+
return rows.map((row) => this.mapSearchResult(row, 'exact', query.includeRawSignature));
|
|
413
|
+
}
|
|
414
|
+
queryPrefix(query, limit) {
|
|
415
|
+
const filters = this.buildSymbolFilters(query, 'symbols');
|
|
416
|
+
const normalizedQuery = `${escapeLikePattern(normalizeText(query.query))}%`;
|
|
417
|
+
const normalizedSelector = `${escapeLikePattern(normalizeSelector(query.query) ?? normalizeText(query.query))}%`;
|
|
418
|
+
const compactQuery = `${escapeLikePattern(compactSelector(query.query) ?? normalizeText(query.query))}%`;
|
|
419
|
+
const rows = this.db
|
|
420
|
+
.prepare(`
|
|
421
|
+
SELECT *
|
|
422
|
+
FROM symbols
|
|
423
|
+
WHERE ${filters.clause}
|
|
424
|
+
AND (
|
|
425
|
+
member_name_normalized LIKE ? ESCAPE '\\'
|
|
426
|
+
OR COALESCE(objc_selector_normalized, '') LIKE ? ESCAPE '\\'
|
|
427
|
+
OR COALESCE(objc_selector_compact, '') LIKE ? ESCAPE '\\'
|
|
428
|
+
)
|
|
429
|
+
ORDER BY framework ASC, COALESCE(class_name, '') ASC, member_name ASC
|
|
430
|
+
LIMIT ?
|
|
431
|
+
`)
|
|
432
|
+
.all(...filters.params, normalizedQuery, normalizedSelector, compactQuery, limit);
|
|
433
|
+
return rows.map((row) => this.mapSearchResult(row, 'prefix', query.includeRawSignature));
|
|
434
|
+
}
|
|
435
|
+
queryFts(query, limit) {
|
|
436
|
+
const ftsQuery = buildFtsQuery(query.query);
|
|
437
|
+
if (!ftsQuery) {
|
|
438
|
+
return [];
|
|
439
|
+
}
|
|
440
|
+
const filters = this.buildSymbolFilters(query, 's');
|
|
441
|
+
const rows = this.db
|
|
442
|
+
.prepare(`
|
|
443
|
+
SELECT s.*
|
|
444
|
+
FROM symbol_search
|
|
445
|
+
JOIN symbols s ON s.id = CAST(symbol_search.symbol_id AS INTEGER)
|
|
446
|
+
WHERE ${filters.clause}
|
|
447
|
+
AND symbol_search MATCH ?
|
|
448
|
+
ORDER BY bm25(symbol_search), s.framework ASC, COALESCE(s.class_name, '') ASC, s.member_name ASC
|
|
449
|
+
LIMIT ?
|
|
450
|
+
`)
|
|
451
|
+
.all(...filters.params, ftsQuery, limit);
|
|
452
|
+
return rows.map((row) => this.mapSearchResult(row, 'fts', query.includeRawSignature));
|
|
453
|
+
}
|
|
454
|
+
queryFuzzy(query, limit) {
|
|
455
|
+
const filters = this.buildSymbolFilters(query, 'symbols');
|
|
456
|
+
const normalizedContains = `%${escapeLikePattern(normalizeText(query.query))}%`;
|
|
457
|
+
const compactContains = `%${escapeLikePattern(compactSelector(query.query) ?? normalizeText(query.query))}%`;
|
|
458
|
+
const normalizedPrefix = `${escapeLikePattern(normalizeText(query.query))}%`;
|
|
459
|
+
const rows = this.db
|
|
460
|
+
.prepare(`
|
|
461
|
+
SELECT *
|
|
462
|
+
FROM symbols
|
|
463
|
+
WHERE ${filters.clause}
|
|
464
|
+
AND (
|
|
465
|
+
searchable_text LIKE ? ESCAPE '\\'
|
|
466
|
+
OR COALESCE(objc_selector_compact, '') LIKE ? ESCAPE '\\'
|
|
467
|
+
OR raw_signature_lower LIKE ? ESCAPE '\\'
|
|
468
|
+
)
|
|
469
|
+
ORDER BY
|
|
470
|
+
CASE
|
|
471
|
+
WHEN member_name_normalized LIKE ? ESCAPE '\\' THEN 0
|
|
472
|
+
ELSE 1
|
|
473
|
+
END,
|
|
474
|
+
framework ASC,
|
|
475
|
+
COALESCE(class_name, '') ASC,
|
|
476
|
+
member_name ASC
|
|
477
|
+
LIMIT ?
|
|
478
|
+
`)
|
|
479
|
+
.all(...filters.params, normalizedContains, compactContains, normalizedContains, normalizedPrefix, limit);
|
|
480
|
+
return rows.map((row) => this.mapSearchResult(row, 'fuzzy', query.includeRawSignature));
|
|
481
|
+
}
|
|
482
|
+
buildSymbolFilters(query, alias) {
|
|
483
|
+
const clauses = [`${alias}.kotlin_version = ?`];
|
|
484
|
+
const params = [query.kotlinVersion];
|
|
485
|
+
if (query.targets.length > 0) {
|
|
486
|
+
clauses.push(`${alias}.target IN (${query.targets.map(() => '?').join(', ')})`);
|
|
487
|
+
params.push(...query.targets);
|
|
488
|
+
}
|
|
489
|
+
if (query.frameworks.length > 0) {
|
|
490
|
+
clauses.push(`${alias}.framework IN (${query.frameworks.map(() => '?').join(', ')})`);
|
|
491
|
+
params.push(...query.frameworks);
|
|
492
|
+
}
|
|
493
|
+
if (!query.includeMetaClasses) {
|
|
494
|
+
clauses.push(`${alias}.is_meta_class = 0`);
|
|
495
|
+
}
|
|
496
|
+
return {
|
|
497
|
+
clause: clauses.join(' AND '),
|
|
498
|
+
params,
|
|
499
|
+
};
|
|
500
|
+
}
|
|
501
|
+
mapSearchResult(row, matchType, includeRawSignature) {
|
|
502
|
+
const declarationForm = resolveDeclarationForm(row.raw_signature);
|
|
503
|
+
return {
|
|
504
|
+
id: row.id,
|
|
505
|
+
kotlinVersion: row.kotlin_version,
|
|
506
|
+
konanHome: row.konan_home,
|
|
507
|
+
target: row.target,
|
|
508
|
+
framework: row.framework,
|
|
509
|
+
packageName: row.package_name,
|
|
510
|
+
className: row.class_name,
|
|
511
|
+
memberName: row.member_name,
|
|
512
|
+
objcSelector: row.objc_selector,
|
|
513
|
+
memberKind: row.member_kind,
|
|
514
|
+
declarationForm,
|
|
515
|
+
isMetaClass: row.is_meta_class === 1,
|
|
516
|
+
matchType,
|
|
517
|
+
...(includeRawSignature ? { rawSignature: row.raw_signature } : {}),
|
|
518
|
+
};
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
function resolveStages(matchMode) {
|
|
522
|
+
switch (matchMode) {
|
|
523
|
+
case 'exact':
|
|
524
|
+
return ['exact'];
|
|
525
|
+
case 'prefix':
|
|
526
|
+
return ['prefix'];
|
|
527
|
+
case 'fuzzy':
|
|
528
|
+
return ['fts', 'fuzzy'];
|
|
529
|
+
case 'auto':
|
|
530
|
+
default:
|
|
531
|
+
return ['exact', 'prefix', 'fts', 'fuzzy'];
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
function buildSearchableText(record) {
|
|
535
|
+
return [
|
|
536
|
+
record.packageName,
|
|
537
|
+
record.className ?? '',
|
|
538
|
+
record.memberSearchName,
|
|
539
|
+
record.objcSelector ?? '',
|
|
540
|
+
record.rawSignature,
|
|
541
|
+
]
|
|
542
|
+
.join(' ')
|
|
543
|
+
.toLowerCase();
|
|
544
|
+
}
|
|
545
|
+
function resolveDeclarationForm(rawSignature) {
|
|
546
|
+
if (/\|null\[\d+\]$/.test(rawSignature)) {
|
|
547
|
+
return 'class';
|
|
548
|
+
}
|
|
549
|
+
if (/\|.+\.objc:[^\[]+\[\d+\]$/.test(rawSignature)) {
|
|
550
|
+
return 'objc_bridge_extension';
|
|
551
|
+
}
|
|
552
|
+
return 'direct_member';
|
|
553
|
+
}
|
|
554
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"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"}
|