@codemap-ai/core 0.2.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/LICENSE +21 -0
- package/dist/config.d.ts +40 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +229 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/agent-pack-doctor.d.ts +36 -0
- package/dist/lib/agent-pack-doctor.d.ts.map +1 -0
- package/dist/lib/agent-pack-doctor.js +325 -0
- package/dist/lib/agent-pack-doctor.js.map +1 -0
- package/dist/lib/agent-pack-installer.d.ts +35 -0
- package/dist/lib/agent-pack-installer.d.ts.map +1 -0
- package/dist/lib/agent-pack-installer.js +371 -0
- package/dist/lib/agent-pack-installer.js.map +1 -0
- package/dist/lib/agent-pack.d.ts +36 -0
- package/dist/lib/agent-pack.d.ts.map +1 -0
- package/dist/lib/agent-pack.js +119 -0
- package/dist/lib/agent-pack.js.map +1 -0
- package/dist/lib/agent-workflow.d.ts +37 -0
- package/dist/lib/agent-workflow.d.ts.map +1 -0
- package/dist/lib/agent-workflow.js +329 -0
- package/dist/lib/agent-workflow.js.map +1 -0
- package/dist/lib/api-types.d.ts +32 -0
- package/dist/lib/api-types.d.ts.map +1 -0
- package/dist/lib/api-types.js +3 -0
- package/dist/lib/api-types.js.map +1 -0
- package/dist/lib/auto-inject.d.ts +16 -0
- package/dist/lib/auto-inject.d.ts.map +1 -0
- package/dist/lib/auto-inject.js +80 -0
- package/dist/lib/auto-inject.js.map +1 -0
- package/dist/lib/bundled-runtime.d.ts +9 -0
- package/dist/lib/bundled-runtime.d.ts.map +1 -0
- package/dist/lib/bundled-runtime.js +20 -0
- package/dist/lib/bundled-runtime.js.map +1 -0
- package/dist/lib/codemap-api.d.ts +22 -0
- package/dist/lib/codemap-api.d.ts.map +1 -0
- package/dist/lib/codemap-api.js +74 -0
- package/dist/lib/codemap-api.js.map +1 -0
- package/dist/lib/import-health.d.ts +38 -0
- package/dist/lib/import-health.d.ts.map +1 -0
- package/dist/lib/import-health.js +186 -0
- package/dist/lib/import-health.js.map +1 -0
- package/dist/lib/local-index.d.ts +52 -0
- package/dist/lib/local-index.d.ts.map +1 -0
- package/dist/lib/local-index.js +262 -0
- package/dist/lib/local-index.js.map +1 -0
- package/dist/lib/markdown-fence.d.ts +8 -0
- package/dist/lib/markdown-fence.d.ts.map +1 -0
- package/dist/lib/markdown-fence.js +98 -0
- package/dist/lib/markdown-fence.js.map +1 -0
- package/dist/lib/mcp-auth.d.ts +39 -0
- package/dist/lib/mcp-auth.d.ts.map +1 -0
- package/dist/lib/mcp-auth.js +184 -0
- package/dist/lib/mcp-auth.js.map +1 -0
- package/dist/lib/monorepo-root.d.ts +7 -0
- package/dist/lib/monorepo-root.d.ts.map +1 -0
- package/dist/lib/monorepo-root.js +23 -0
- package/dist/lib/monorepo-root.js.map +1 -0
- package/dist/lib/onboarding.d.ts +5 -0
- package/dist/lib/onboarding.d.ts.map +1 -0
- package/dist/lib/onboarding.js +96 -0
- package/dist/lib/onboarding.js.map +1 -0
- package/dist/lib/open-url.d.ts +7 -0
- package/dist/lib/open-url.d.ts.map +1 -0
- package/dist/lib/open-url.js +38 -0
- package/dist/lib/open-url.js.map +1 -0
- package/dist/lib/regex-utils.d.ts +2 -0
- package/dist/lib/regex-utils.d.ts.map +1 -0
- package/dist/lib/regex-utils.js +4 -0
- package/dist/lib/regex-utils.js.map +1 -0
- package/dist/lib/server-instructions.d.ts +2 -0
- package/dist/lib/server-instructions.d.ts.map +1 -0
- package/dist/lib/server-instructions.js +34 -0
- package/dist/lib/server-instructions.js.map +1 -0
- package/dist/lib/session-context.d.ts +2 -0
- package/dist/lib/session-context.d.ts.map +1 -0
- package/dist/lib/session-context.js +40 -0
- package/dist/lib/session-context.js.map +1 -0
- package/dist/lib/session-tracker.d.ts +16 -0
- package/dist/lib/session-tracker.d.ts.map +1 -0
- package/dist/lib/session-tracker.js +32 -0
- package/dist/lib/session-tracker.js.map +1 -0
- package/dist/lib/sqlite-index-store.d.ts +165 -0
- package/dist/lib/sqlite-index-store.d.ts.map +1 -0
- package/dist/lib/sqlite-index-store.js +609 -0
- package/dist/lib/sqlite-index-store.js.map +1 -0
- package/dist/lib/tool-response.d.ts +97 -0
- package/dist/lib/tool-response.d.ts.map +1 -0
- package/dist/lib/tool-response.js +127 -0
- package/dist/lib/tool-response.js.map +1 -0
- package/dist/lib/uuid-schema.d.ts +8 -0
- package/dist/lib/uuid-schema.d.ts.map +1 -0
- package/dist/lib/uuid-schema.js +10 -0
- package/dist/lib/uuid-schema.js.map +1 -0
- package/dist/lib/workspace-git.d.ts +16 -0
- package/dist/lib/workspace-git.d.ts.map +1 -0
- package/dist/lib/workspace-git.js +53 -0
- package/dist/lib/workspace-git.js.map +1 -0
- package/dist/lib/workspace-project.d.ts +61 -0
- package/dist/lib/workspace-project.d.ts.map +1 -0
- package/dist/lib/workspace-project.js +231 -0
- package/dist/lib/workspace-project.js.map +1 -0
- package/dist/lib/workspace-resolver.d.ts +16 -0
- package/dist/lib/workspace-resolver.d.ts.map +1 -0
- package/dist/lib/workspace-resolver.js +59 -0
- package/dist/lib/workspace-resolver.js.map +1 -0
- package/dist/lib/workspace-zip.d.ts +12 -0
- package/dist/lib/workspace-zip.d.ts.map +1 -0
- package/dist/lib/workspace-zip.js +126 -0
- package/dist/lib/workspace-zip.js.map +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1,609 @@
|
|
|
1
|
+
import { DatabaseSync } from "node:sqlite";
|
|
2
|
+
import { existsSync, mkdirSync } from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
function stableId(...parts) {
|
|
5
|
+
return parts
|
|
6
|
+
.map((part) => String(part ?? ""))
|
|
7
|
+
.join(":")
|
|
8
|
+
.replace(/[^a-zA-Z0-9:_./#-]/g, "_");
|
|
9
|
+
}
|
|
10
|
+
function terms(query) {
|
|
11
|
+
return query
|
|
12
|
+
.toLowerCase()
|
|
13
|
+
.split(/[\s\-_/.,:]+/)
|
|
14
|
+
.map((term) => term.replace(/[^a-z0-9]/g, ""))
|
|
15
|
+
.filter((term) => term.length > 1);
|
|
16
|
+
}
|
|
17
|
+
function includesAll(input, queryTerms) {
|
|
18
|
+
const lower = input.toLowerCase();
|
|
19
|
+
return queryTerms.every((term) => lower.includes(term));
|
|
20
|
+
}
|
|
21
|
+
function scoreText(input, queryTerms, baseRank) {
|
|
22
|
+
const lower = input.toLowerCase();
|
|
23
|
+
let score = 100 - baseRank;
|
|
24
|
+
for (const term of queryTerms) {
|
|
25
|
+
if (lower === term)
|
|
26
|
+
score += 30;
|
|
27
|
+
else if (lower.includes(term))
|
|
28
|
+
score += 12;
|
|
29
|
+
}
|
|
30
|
+
return score;
|
|
31
|
+
}
|
|
32
|
+
function resolveContentStatus(isBinary, parseStatus, content) {
|
|
33
|
+
if (content != null)
|
|
34
|
+
return "ready";
|
|
35
|
+
if (isBinary)
|
|
36
|
+
return "binary";
|
|
37
|
+
if (parseStatus === "too_large")
|
|
38
|
+
return "too_large";
|
|
39
|
+
if (parseStatus === "unsupported")
|
|
40
|
+
return "unsupported";
|
|
41
|
+
return "unavailable";
|
|
42
|
+
}
|
|
43
|
+
export function sqliteIndexDbPath(workspaceRootPath) {
|
|
44
|
+
return path.join(workspaceRootPath, ".codemap", "local-index.db");
|
|
45
|
+
}
|
|
46
|
+
const SCHEMA_SQL = `
|
|
47
|
+
CREATE TABLE IF NOT EXISTS meta (key TEXT PRIMARY KEY, value TEXT);
|
|
48
|
+
|
|
49
|
+
CREATE TABLE IF NOT EXISTS manifest (
|
|
50
|
+
path TEXT PRIMARY KEY,
|
|
51
|
+
sizeBytes INTEGER NOT NULL,
|
|
52
|
+
contentSha256 TEXT,
|
|
53
|
+
parseStatus TEXT NOT NULL
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
CREATE TABLE IF NOT EXISTS files (
|
|
57
|
+
path TEXT PRIMARY KEY,
|
|
58
|
+
dirPath TEXT NOT NULL,
|
|
59
|
+
baseName TEXT NOT NULL,
|
|
60
|
+
extension TEXT,
|
|
61
|
+
language TEXT,
|
|
62
|
+
mimeType TEXT,
|
|
63
|
+
sizeBytes INTEGER NOT NULL,
|
|
64
|
+
lineCount INTEGER,
|
|
65
|
+
parseStatus TEXT NOT NULL,
|
|
66
|
+
isBinary INTEGER NOT NULL,
|
|
67
|
+
isText INTEGER NOT NULL,
|
|
68
|
+
contentSha256 TEXT,
|
|
69
|
+
content TEXT
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
CREATE TABLE IF NOT EXISTS symbols (
|
|
73
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
74
|
+
filePath TEXT NOT NULL,
|
|
75
|
+
localKey TEXT NOT NULL,
|
|
76
|
+
stableKey TEXT NOT NULL,
|
|
77
|
+
displayName TEXT NOT NULL,
|
|
78
|
+
kind TEXT NOT NULL,
|
|
79
|
+
signature TEXT,
|
|
80
|
+
returnType TEXT,
|
|
81
|
+
doc TEXT,
|
|
82
|
+
isExported INTEGER NOT NULL,
|
|
83
|
+
parentSymbolLocalKey TEXT,
|
|
84
|
+
line INTEGER,
|
|
85
|
+
col INTEGER,
|
|
86
|
+
endLine INTEGER,
|
|
87
|
+
endCol INTEGER
|
|
88
|
+
);
|
|
89
|
+
CREATE INDEX IF NOT EXISTS idx_symbols_filePath ON symbols(filePath);
|
|
90
|
+
CREATE INDEX IF NOT EXISTS idx_symbols_displayName ON symbols(lower(displayName));
|
|
91
|
+
|
|
92
|
+
CREATE TABLE IF NOT EXISTS imports (
|
|
93
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
94
|
+
filePath TEXT NOT NULL,
|
|
95
|
+
localKey TEXT NOT NULL,
|
|
96
|
+
moduleSpecifier TEXT NOT NULL,
|
|
97
|
+
importKind TEXT NOT NULL,
|
|
98
|
+
resolutionKind TEXT NOT NULL,
|
|
99
|
+
targetPathText TEXT,
|
|
100
|
+
targetExternalSymbolKey TEXT,
|
|
101
|
+
line INTEGER NOT NULL,
|
|
102
|
+
col INTEGER NOT NULL,
|
|
103
|
+
endLine INTEGER NOT NULL,
|
|
104
|
+
endCol INTEGER NOT NULL
|
|
105
|
+
);
|
|
106
|
+
CREATE INDEX IF NOT EXISTS idx_imports_filePath ON imports(filePath);
|
|
107
|
+
|
|
108
|
+
CREATE TABLE IF NOT EXISTS imported_by (
|
|
109
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
110
|
+
targetFilePath TEXT NOT NULL,
|
|
111
|
+
sourceFilePath TEXT NOT NULL,
|
|
112
|
+
moduleSpecifier TEXT NOT NULL,
|
|
113
|
+
importKind TEXT NOT NULL,
|
|
114
|
+
resolutionKind TEXT NOT NULL,
|
|
115
|
+
startLine INTEGER NOT NULL,
|
|
116
|
+
startCol INTEGER NOT NULL,
|
|
117
|
+
endLine INTEGER NOT NULL,
|
|
118
|
+
endCol INTEGER NOT NULL
|
|
119
|
+
);
|
|
120
|
+
CREATE INDEX IF NOT EXISTS idx_ib_target ON imported_by(targetFilePath);
|
|
121
|
+
CREATE INDEX IF NOT EXISTS idx_ib_source ON imported_by(sourceFilePath);
|
|
122
|
+
|
|
123
|
+
CREATE TABLE IF NOT EXISTS exports (
|
|
124
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
125
|
+
filePath TEXT NOT NULL,
|
|
126
|
+
exportName TEXT NOT NULL,
|
|
127
|
+
exportKind TEXT NOT NULL,
|
|
128
|
+
symbolLocalKey TEXT,
|
|
129
|
+
line INTEGER NOT NULL,
|
|
130
|
+
col INTEGER NOT NULL,
|
|
131
|
+
endLine INTEGER NOT NULL,
|
|
132
|
+
endCol INTEGER NOT NULL
|
|
133
|
+
);
|
|
134
|
+
CREATE INDEX IF NOT EXISTS idx_exports_filePath ON exports(filePath);
|
|
135
|
+
CREATE INDEX IF NOT EXISTS idx_exports_exportName ON exports(lower(exportName));
|
|
136
|
+
`;
|
|
137
|
+
export class SQLiteIndexStore {
|
|
138
|
+
db;
|
|
139
|
+
dbPath;
|
|
140
|
+
constructor(dbPath) {
|
|
141
|
+
this.dbPath = dbPath;
|
|
142
|
+
this.db = new DatabaseSync(dbPath);
|
|
143
|
+
this.db.exec("PRAGMA journal_mode=WAL; PRAGMA synchronous=NORMAL;");
|
|
144
|
+
this.db.exec(SCHEMA_SQL);
|
|
145
|
+
}
|
|
146
|
+
static open(dbPath) {
|
|
147
|
+
mkdirSync(path.dirname(dbPath), { recursive: true });
|
|
148
|
+
return new SQLiteIndexStore(dbPath);
|
|
149
|
+
}
|
|
150
|
+
static exists(dbPath) {
|
|
151
|
+
return existsSync(dbPath);
|
|
152
|
+
}
|
|
153
|
+
getMeta() {
|
|
154
|
+
const rows = this.db
|
|
155
|
+
.prepare("SELECT key, value FROM meta")
|
|
156
|
+
.all();
|
|
157
|
+
if (rows.length === 0)
|
|
158
|
+
return null;
|
|
159
|
+
const m = Object.fromEntries(rows.map((r) => [r.key, r.value]));
|
|
160
|
+
if (!m["indexedAt"] || !m["workspaceRootPath"])
|
|
161
|
+
return null;
|
|
162
|
+
return {
|
|
163
|
+
indexedAt: m["indexedAt"],
|
|
164
|
+
commitSha: m["commitSha"] ?? null,
|
|
165
|
+
workspaceRootPath: m["workspaceRootPath"],
|
|
166
|
+
cachePath: m["cachePath"] ?? this.dbPath,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
getAllFilePaths() {
|
|
170
|
+
const rows = this.db.prepare("SELECT path FROM manifest ORDER BY path").all();
|
|
171
|
+
return rows.map((r) => r.path);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Remove a single file and all its associated data from the index.
|
|
175
|
+
* Returns true if rows were deleted, false if the file wasn't in the index.
|
|
176
|
+
*/
|
|
177
|
+
removeFileFromIndex(filePath) {
|
|
178
|
+
const delManifest = this.db.prepare("DELETE FROM manifest WHERE path = ?");
|
|
179
|
+
const delFiles = this.db.prepare("DELETE FROM files WHERE path = ?");
|
|
180
|
+
const delSymbols = this.db.prepare("DELETE FROM symbols WHERE filePath = ?");
|
|
181
|
+
const delImports = this.db.prepare("DELETE FROM imports WHERE filePath = ?");
|
|
182
|
+
const delImportedBy = this.db.prepare("DELETE FROM imported_by WHERE targetFilePath = ?");
|
|
183
|
+
const delExports = this.db.prepare("DELETE FROM exports WHERE filePath = ?");
|
|
184
|
+
try {
|
|
185
|
+
this.db.exec("BEGIN");
|
|
186
|
+
const r = delManifest.run(filePath);
|
|
187
|
+
delFiles.run(filePath);
|
|
188
|
+
delSymbols.run(filePath);
|
|
189
|
+
delImports.run(filePath);
|
|
190
|
+
delImportedBy.run(filePath);
|
|
191
|
+
delExports.run(filePath);
|
|
192
|
+
this.db.exec("COMMIT");
|
|
193
|
+
return r.changes > 0;
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
this.db.exec("ROLLBACK");
|
|
197
|
+
throw error;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
isStale(currentFiles) {
|
|
201
|
+
const manifestRows = this.db
|
|
202
|
+
.prepare("SELECT path, sizeBytes, contentSha256, parseStatus FROM manifest ORDER BY path")
|
|
203
|
+
.all();
|
|
204
|
+
if (manifestRows.length !== currentFiles.length)
|
|
205
|
+
return true;
|
|
206
|
+
const sorted = [...currentFiles].sort((a, b) => a.path.localeCompare(b.path));
|
|
207
|
+
for (let i = 0; i < sorted.length; i++) {
|
|
208
|
+
const f = sorted[i];
|
|
209
|
+
const m = manifestRows[i];
|
|
210
|
+
if (f.path !== m.path ||
|
|
211
|
+
f.sizeBytes !== m.sizeBytes ||
|
|
212
|
+
(f.contentSha256 ?? null) !== m.contentSha256 ||
|
|
213
|
+
f.parseStatus !== m.parseStatus) {
|
|
214
|
+
return true;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return false;
|
|
218
|
+
}
|
|
219
|
+
getSummary(stale = false) {
|
|
220
|
+
const meta = this.getMeta();
|
|
221
|
+
const fileCount = this.db.prepare("SELECT COUNT(*) as n FROM files").get().n;
|
|
222
|
+
const symbolCount = this.db.prepare("SELECT COUNT(*) as n FROM symbols").get().n;
|
|
223
|
+
return {
|
|
224
|
+
workspaceRootPath: meta?.workspaceRootPath ?? "",
|
|
225
|
+
cachePath: meta?.cachePath ?? this.dbPath,
|
|
226
|
+
indexedAt: meta?.indexedAt ?? null,
|
|
227
|
+
fileCount,
|
|
228
|
+
symbolCount,
|
|
229
|
+
stale,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
listFiles(limit = 100) {
|
|
233
|
+
return this.db
|
|
234
|
+
.prepare("SELECT path, language, lineCount, parseStatus FROM files ORDER BY path LIMIT ?")
|
|
235
|
+
.all(limit);
|
|
236
|
+
}
|
|
237
|
+
write(files, meta) {
|
|
238
|
+
this.db.exec("BEGIN");
|
|
239
|
+
try {
|
|
240
|
+
this.db.exec("DELETE FROM meta; DELETE FROM manifest; DELETE FROM files; DELETE FROM symbols; DELETE FROM imports; DELETE FROM imported_by; DELETE FROM exports;");
|
|
241
|
+
const insertMeta = this.db.prepare("INSERT OR REPLACE INTO meta(key, value) VALUES(?, ?)");
|
|
242
|
+
insertMeta.run("indexedAt", meta.indexedAt);
|
|
243
|
+
insertMeta.run("commitSha", meta.commitSha ?? null);
|
|
244
|
+
insertMeta.run("workspaceRootPath", meta.workspaceRootPath);
|
|
245
|
+
insertMeta.run("cachePath", meta.cachePath);
|
|
246
|
+
insertMeta.run("parserName", meta.parserName);
|
|
247
|
+
insertMeta.run("parserVersion", meta.parserVersion);
|
|
248
|
+
const insertManifest = this.db.prepare("INSERT INTO manifest(path, sizeBytes, contentSha256, parseStatus) VALUES(?, ?, ?, ?)");
|
|
249
|
+
const insertFile = this.db.prepare("INSERT INTO files(path, dirPath, baseName, extension, language, mimeType, sizeBytes, lineCount, parseStatus, isBinary, isText, contentSha256, content) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
|
|
250
|
+
const insertSymbol = this.db.prepare("INSERT INTO symbols(filePath, localKey, stableKey, displayName, kind, signature, returnType, doc, isExported, parentSymbolLocalKey, line, col, endLine, endCol) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
|
|
251
|
+
const insertImport = this.db.prepare("INSERT INTO imports(filePath, localKey, moduleSpecifier, importKind, resolutionKind, targetPathText, targetExternalSymbolKey, line, col, endLine, endCol) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
|
|
252
|
+
const insertImportedBy = this.db.prepare("INSERT INTO imported_by(targetFilePath, sourceFilePath, moduleSpecifier, importKind, resolutionKind, startLine, startCol, endLine, endCol) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)");
|
|
253
|
+
const insertExport = this.db.prepare("INSERT INTO exports(filePath, exportName, exportKind, symbolLocalKey, line, col, endLine, endCol) VALUES(?, ?, ?, ?, ?, ?, ?, ?)");
|
|
254
|
+
for (const file of files) {
|
|
255
|
+
insertManifest.run(file.path, file.sizeBytes, file.contentSha256 ?? null, file.parseStatus);
|
|
256
|
+
insertFile.run(file.path, file.dirPath, file.baseName, file.extension ?? null, file.language ?? null, file.mimeType ?? null, file.sizeBytes, file.lineCount ?? null, file.parseStatus, file.isBinary ? 1 : 0, file.isText ? 1 : 0, file.contentSha256 ?? null, file.content ?? null);
|
|
257
|
+
for (const sym of file.symbols) {
|
|
258
|
+
insertSymbol.run(file.path, sym.localKey, sym.stableKey, sym.displayName, sym.kind, sym.signature ?? null, sym.returnType ?? null, sym.doc ?? null, sym.isExported ? 1 : 0, sym.parentSymbolLocalKey ?? null, sym.line, sym.col, sym.endLine, sym.endCol);
|
|
259
|
+
}
|
|
260
|
+
for (const imp of file.imports) {
|
|
261
|
+
insertImport.run(file.path, imp.localKey, imp.moduleSpecifier, imp.importKind, imp.resolutionKind, imp.targetPathText ?? null, imp.targetExternalSymbolKey ?? null, imp.line, imp.col, imp.endLine, imp.endCol);
|
|
262
|
+
}
|
|
263
|
+
for (const ib of file.importedBy) {
|
|
264
|
+
insertImportedBy.run(file.path, ib.sourceFilePath, ib.moduleSpecifier, ib.importKind, ib.resolutionKind, ib.startLine, ib.startCol, ib.endLine, ib.endCol);
|
|
265
|
+
}
|
|
266
|
+
for (const exp of file.exports) {
|
|
267
|
+
insertExport.run(file.path, exp.exportName, exp.exportKind, exp.symbolLocalKey ?? null, exp.line, exp.col, exp.endLine, exp.endCol);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
this.db.exec("COMMIT");
|
|
271
|
+
}
|
|
272
|
+
catch (error) {
|
|
273
|
+
this.db.exec("ROLLBACK");
|
|
274
|
+
throw error;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Upsert a single file's data. Replaces manifest/files/symbols/imports/exports rows
|
|
279
|
+
* for the file and rebuilds imported_by entries where this file is the target.
|
|
280
|
+
* Does NOT update imported_by entries in OTHER files that import this file
|
|
281
|
+
* (those are managed by the importer's own upsert).
|
|
282
|
+
*/
|
|
283
|
+
upsertFile(file, opts = {}) {
|
|
284
|
+
this.db.exec("BEGIN");
|
|
285
|
+
try {
|
|
286
|
+
// Delete all data for this file from file-owned tables
|
|
287
|
+
this.db.prepare("DELETE FROM manifest WHERE path = ?").run(file.path);
|
|
288
|
+
this.db.prepare("DELETE FROM files WHERE path = ?").run(file.path);
|
|
289
|
+
this.db.prepare("DELETE FROM symbols WHERE filePath = ?").run(file.path);
|
|
290
|
+
this.db.prepare("DELETE FROM imports WHERE filePath = ?").run(file.path);
|
|
291
|
+
this.db.prepare("DELETE FROM exports WHERE filePath = ?").run(file.path);
|
|
292
|
+
// Delete imported_by entries where this file is the TARGET (other files import this file)
|
|
293
|
+
// and where this file is the SOURCE (this file imports other files).
|
|
294
|
+
if (!opts.keepImportedByForFile) {
|
|
295
|
+
this.db.prepare("DELETE FROM imported_by WHERE targetFilePath = ? OR sourceFilePath = ?").run(file.path, file.path);
|
|
296
|
+
}
|
|
297
|
+
// Re-insert manifest + files
|
|
298
|
+
this.db.prepare("INSERT INTO manifest(path, sizeBytes, contentSha256, parseStatus) VALUES(?, ?, ?, ?)").run(file.path, file.sizeBytes, file.contentSha256 ?? null, file.parseStatus);
|
|
299
|
+
this.db.prepare("INSERT INTO files(path, dirPath, baseName, extension, language, mimeType, sizeBytes, lineCount, parseStatus, isBinary, isText, contentSha256, content) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)").run(file.path, file.dirPath, file.baseName, file.extension ?? null, file.language ?? null, file.mimeType ?? null, file.sizeBytes, file.lineCount ?? null, file.parseStatus, file.isBinary ? 1 : 0, file.isText ? 1 : 0, file.contentSha256 ?? null, file.content ?? null);
|
|
300
|
+
// Re-insert symbols
|
|
301
|
+
const insertSymbol = this.db.prepare("INSERT INTO symbols(filePath, localKey, stableKey, displayName, kind, signature, returnType, doc, isExported, parentSymbolLocalKey, line, col, endLine, endCol) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
|
|
302
|
+
for (const sym of file.symbols) {
|
|
303
|
+
insertSymbol.run(file.path, sym.localKey, sym.stableKey, sym.displayName, sym.kind, sym.signature ?? null, sym.returnType ?? null, sym.doc ?? null, sym.isExported ? 1 : 0, sym.parentSymbolLocalKey ?? null, sym.line, sym.col, sym.endLine, sym.endCol);
|
|
304
|
+
}
|
|
305
|
+
// Re-insert imports
|
|
306
|
+
const insertImport = this.db.prepare("INSERT INTO imports(filePath, localKey, moduleSpecifier, importKind, resolutionKind, targetPathText, targetExternalSymbolKey, line, col, endLine, endCol) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
|
|
307
|
+
for (const imp of file.imports) {
|
|
308
|
+
insertImport.run(file.path, imp.localKey, imp.moduleSpecifier, imp.importKind, imp.resolutionKind, imp.targetPathText ?? null, imp.targetExternalSymbolKey ?? null, imp.line, imp.col, imp.endLine, imp.endCol);
|
|
309
|
+
}
|
|
310
|
+
// Re-insert imported_by entries for imports owned by this file
|
|
311
|
+
const insertIB = this.db.prepare("INSERT INTO imported_by(targetFilePath, sourceFilePath, moduleSpecifier, importKind, resolutionKind, startLine, startCol, endLine, endCol) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)");
|
|
312
|
+
for (const imp of file.imports) {
|
|
313
|
+
if (!imp.targetPathText)
|
|
314
|
+
continue;
|
|
315
|
+
insertIB.run(imp.targetPathText, file.path, imp.moduleSpecifier, imp.importKind, imp.resolutionKind, imp.line, imp.col, imp.endLine, imp.endCol);
|
|
316
|
+
}
|
|
317
|
+
// Re-insert exports
|
|
318
|
+
const insertExport = this.db.prepare("INSERT INTO exports(filePath, exportName, exportKind, symbolLocalKey, line, col, endLine, endCol) VALUES(?, ?, ?, ?, ?, ?, ?, ?)");
|
|
319
|
+
for (const exp of file.exports) {
|
|
320
|
+
insertExport.run(file.path, exp.exportName, exp.exportKind, exp.symbolLocalKey ?? null, exp.line, exp.col, exp.endLine, exp.endCol);
|
|
321
|
+
}
|
|
322
|
+
// Re-insert imported_by entries for this file (where other files import from this file)
|
|
323
|
+
// These are derived from the imports table: for each import with targetPathText = file.path,
|
|
324
|
+
// the importing file has an imported_by entry pointing to this file
|
|
325
|
+
const importers = this.db.prepare("SELECT filePath, moduleSpecifier, importKind, resolutionKind, line, col, endLine, endCol FROM imports WHERE targetPathText = ?").all(file.path);
|
|
326
|
+
for (const imp of importers) {
|
|
327
|
+
insertIB.run(file.path, imp.filePath, imp.moduleSpecifier, imp.importKind, imp.resolutionKind, imp.line, imp.col, imp.endLine, imp.endCol);
|
|
328
|
+
}
|
|
329
|
+
this.db.exec("COMMIT");
|
|
330
|
+
}
|
|
331
|
+
catch (error) {
|
|
332
|
+
this.db.exec("ROLLBACK");
|
|
333
|
+
throw error;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
search(query, symbolKinds) {
|
|
337
|
+
const queryTerms = terms(query);
|
|
338
|
+
if (queryTerms.length === 0)
|
|
339
|
+
return { files: [], symbols: [], exports: [] };
|
|
340
|
+
const likeConds = (col) => queryTerms.map(() => `LOWER(${col}) LIKE ?`).join(" AND ");
|
|
341
|
+
const likeArgs = (col = "") => queryTerms.map((t) => `%${col}${t}%`);
|
|
342
|
+
// Files
|
|
343
|
+
const fileRows = this.db
|
|
344
|
+
.prepare(`SELECT path, language FROM files WHERE ${likeConds("path")} LIMIT 50`)
|
|
345
|
+
.all(...likeArgs());
|
|
346
|
+
const files = fileRows
|
|
347
|
+
.filter((r) => includesAll(r.path, queryTerms))
|
|
348
|
+
.sort((a, b) => scoreText(b.path, queryTerms, 0) - scoreText(a.path, queryTerms, 0))
|
|
349
|
+
.slice(0, 25)
|
|
350
|
+
.map((r) => ({ kind: "file", path: r.path, language: r.language }));
|
|
351
|
+
// Symbols
|
|
352
|
+
const symTermCond = `(${likeConds("s.displayName")} OR ${likeConds("s.filePath")})`;
|
|
353
|
+
const symArgs = [...likeArgs(), ...likeArgs()];
|
|
354
|
+
let symSql = `
|
|
355
|
+
SELECT s.filePath, s.localKey, s.stableKey, s.displayName, s.kind, s.signature,
|
|
356
|
+
s.parentSymbolLocalKey, s.line, s.col, s.endLine, s.endCol
|
|
357
|
+
FROM symbols s
|
|
358
|
+
WHERE ${symTermCond}
|
|
359
|
+
`;
|
|
360
|
+
if (symbolKinds && symbolKinds.length > 0) {
|
|
361
|
+
symSql += ` AND s.kind IN (${symbolKinds.map(() => "?").join(",")})`;
|
|
362
|
+
symArgs.push(...symbolKinds);
|
|
363
|
+
}
|
|
364
|
+
symSql += " LIMIT 50";
|
|
365
|
+
const symRows = this.db.prepare(symSql).all(...symArgs);
|
|
366
|
+
// Resolve parent display names in one batch
|
|
367
|
+
const parentKeys = [...new Set(symRows.map((r) => r.parentSymbolLocalKey).filter(Boolean))];
|
|
368
|
+
const parentNameMap = new Map();
|
|
369
|
+
if (parentKeys.length > 0) {
|
|
370
|
+
const parentRows = this.db
|
|
371
|
+
.prepare(`SELECT localKey, displayName FROM symbols WHERE localKey IN (${parentKeys.map(() => "?").join(",")})`)
|
|
372
|
+
.all(...parentKeys);
|
|
373
|
+
for (const pr of parentRows)
|
|
374
|
+
parentNameMap.set(pr.localKey, pr.displayName);
|
|
375
|
+
}
|
|
376
|
+
const symbols = symRows
|
|
377
|
+
.filter((r) => includesAll(`${r.displayName} ${r.signature ?? ""} ${r.filePath}`, queryTerms))
|
|
378
|
+
.sort((a, b) => scoreText(`${b.displayName} ${b.filePath}`, queryTerms, 0) -
|
|
379
|
+
scoreText(`${a.displayName} ${a.filePath}`, queryTerms, 0))
|
|
380
|
+
.slice(0, 25)
|
|
381
|
+
.map((r) => ({
|
|
382
|
+
kind: "symbol",
|
|
383
|
+
id: stableId(r.filePath, r.stableKey),
|
|
384
|
+
displayName: r.displayName,
|
|
385
|
+
symbolKind: r.kind,
|
|
386
|
+
signature: r.signature,
|
|
387
|
+
filePath: r.filePath,
|
|
388
|
+
parentSymbolName: r.parentSymbolLocalKey ? (parentNameMap.get(r.parentSymbolLocalKey) ?? null) : null,
|
|
389
|
+
startLine: r.line,
|
|
390
|
+
startCol: r.col,
|
|
391
|
+
endLine: r.endLine,
|
|
392
|
+
endCol: r.endCol,
|
|
393
|
+
}));
|
|
394
|
+
const expRows = this.db
|
|
395
|
+
.prepare(`SELECT e.filePath, e.exportName, e.exportKind, e.symbolLocalKey, e.line, e.col, e.endLine, e.endCol
|
|
396
|
+
FROM exports e
|
|
397
|
+
WHERE (${likeConds("e.exportName")} OR ${likeConds("e.filePath")})
|
|
398
|
+
LIMIT 50`)
|
|
399
|
+
.all(...likeArgs(), ...likeArgs());
|
|
400
|
+
const expSymKeys = [...new Set(expRows.map((r) => r.symbolLocalKey).filter(Boolean))];
|
|
401
|
+
const expSymMap = new Map();
|
|
402
|
+
if (expSymKeys.length > 0) {
|
|
403
|
+
const symInfoRows = this.db
|
|
404
|
+
.prepare(`SELECT localKey, stableKey, displayName, line, col, endLine, endCol FROM symbols WHERE localKey IN (${expSymKeys.map(() => "?").join(",")})`)
|
|
405
|
+
.all(...expSymKeys);
|
|
406
|
+
for (const sr of symInfoRows)
|
|
407
|
+
expSymMap.set(sr.localKey, sr);
|
|
408
|
+
}
|
|
409
|
+
const exports = expRows
|
|
410
|
+
.filter((r) => includesAll(`${r.exportName} ${r.filePath}`, queryTerms))
|
|
411
|
+
.sort((a, b) => scoreText(`${b.exportName} ${b.filePath}`, queryTerms, 0) -
|
|
412
|
+
scoreText(`${a.exportName} ${a.filePath}`, queryTerms, 0))
|
|
413
|
+
.slice(0, 25)
|
|
414
|
+
.map((r) => {
|
|
415
|
+
const sym = r.symbolLocalKey ? (expSymMap.get(r.symbolLocalKey) ?? null) : null;
|
|
416
|
+
return {
|
|
417
|
+
kind: "export",
|
|
418
|
+
id: stableId(r.filePath, "export", r.exportName, r.line, r.col),
|
|
419
|
+
exportName: r.exportName,
|
|
420
|
+
filePath: r.filePath,
|
|
421
|
+
symbolId: sym ? stableId(r.filePath, sym.stableKey) : null,
|
|
422
|
+
symbolStartLine: sym?.line ?? null,
|
|
423
|
+
symbolStartCol: sym?.col ?? null,
|
|
424
|
+
symbolEndLine: sym?.endLine ?? null,
|
|
425
|
+
symbolEndCol: sym?.endCol ?? null,
|
|
426
|
+
startLine: r.line,
|
|
427
|
+
startCol: r.col,
|
|
428
|
+
endLine: r.endLine,
|
|
429
|
+
endCol: r.endCol,
|
|
430
|
+
};
|
|
431
|
+
});
|
|
432
|
+
return { files, symbols, exports };
|
|
433
|
+
}
|
|
434
|
+
getFileContent(filePath, startLine, endLine) {
|
|
435
|
+
const row = this.db
|
|
436
|
+
.prepare("SELECT path, baseName, extension, language, mimeType, sizeBytes, parseStatus, isBinary, content FROM files WHERE path = ?")
|
|
437
|
+
.get(filePath);
|
|
438
|
+
if (!row)
|
|
439
|
+
return null;
|
|
440
|
+
const isBinary = row.isBinary === 1;
|
|
441
|
+
let content = row.content;
|
|
442
|
+
if (content && (startLine !== undefined || endLine !== undefined)) {
|
|
443
|
+
const lines = content.split("\n");
|
|
444
|
+
const start = Math.max(1, startLine ?? 1);
|
|
445
|
+
const end = Math.min(lines.length, endLine ?? lines.length);
|
|
446
|
+
content = lines.slice(start - 1, end).join("\n");
|
|
447
|
+
}
|
|
448
|
+
return {
|
|
449
|
+
path: row.path,
|
|
450
|
+
name: row.baseName,
|
|
451
|
+
type: "file",
|
|
452
|
+
extension: row.extension,
|
|
453
|
+
language: row.language,
|
|
454
|
+
kind: isBinary ? "binary" : "text",
|
|
455
|
+
mimeType: row.mimeType,
|
|
456
|
+
status: resolveContentStatus(isBinary, row.parseStatus, row.content),
|
|
457
|
+
content,
|
|
458
|
+
sizeBytes: row.sizeBytes,
|
|
459
|
+
reason: content ? null : row.parseStatus,
|
|
460
|
+
};
|
|
461
|
+
}
|
|
462
|
+
getFileParse(filePath) {
|
|
463
|
+
const fileRow = this.db
|
|
464
|
+
.prepare("SELECT path, language, lineCount, parseStatus, sizeBytes, mimeType, extension FROM files WHERE path = ?")
|
|
465
|
+
.get(filePath);
|
|
466
|
+
if (!fileRow)
|
|
467
|
+
return null;
|
|
468
|
+
const importRows = this.db
|
|
469
|
+
.prepare("SELECT localKey, moduleSpecifier, importKind, resolutionKind, targetPathText, targetExternalSymbolKey, line, col, endLine, endCol FROM imports WHERE filePath = ? ORDER BY line")
|
|
470
|
+
.all(filePath);
|
|
471
|
+
const importedByRows = this.db
|
|
472
|
+
.prepare("SELECT sourceFilePath, moduleSpecifier, importKind, resolutionKind, startLine, startCol, endLine, endCol FROM imported_by WHERE targetFilePath = ? ORDER BY startLine")
|
|
473
|
+
.all(filePath);
|
|
474
|
+
const symbolRows = this.db
|
|
475
|
+
.prepare("SELECT localKey, stableKey, displayName, kind, signature, returnType, doc, isExported, parentSymbolLocalKey, line, col, endLine, endCol FROM symbols WHERE filePath = ? ORDER BY line")
|
|
476
|
+
.all(filePath);
|
|
477
|
+
const symbolByLocalKey = new Map(symbolRows.map((s) => [s.localKey, s]));
|
|
478
|
+
const exportRows = this.db
|
|
479
|
+
.prepare("SELECT exportName, exportKind, symbolLocalKey, line, col, endLine, endCol FROM exports WHERE filePath = ? ORDER BY line")
|
|
480
|
+
.all(filePath);
|
|
481
|
+
// Blast radius: batch-query incoming/outgoing counts for all source files
|
|
482
|
+
const sourceFiles = [...new Set(importedByRows.map((r) => r.sourceFilePath))];
|
|
483
|
+
const blastRadiusRows = sourceFiles.length > 0
|
|
484
|
+
? this.db
|
|
485
|
+
.prepare(`SELECT
|
|
486
|
+
ib.sourceFilePath,
|
|
487
|
+
f.language,
|
|
488
|
+
(SELECT COUNT(*) FROM imported_by WHERE targetFilePath = ib.sourceFilePath) as incomingCount,
|
|
489
|
+
(SELECT COUNT(*) FROM imports WHERE filePath = ib.sourceFilePath) as outgoingCount
|
|
490
|
+
FROM imported_by ib
|
|
491
|
+
LEFT JOIN files f ON f.path = ib.sourceFilePath
|
|
492
|
+
WHERE ib.targetFilePath = ?
|
|
493
|
+
GROUP BY ib.sourceFilePath`)
|
|
494
|
+
.all(filePath)
|
|
495
|
+
: [];
|
|
496
|
+
return {
|
|
497
|
+
file: {
|
|
498
|
+
fileId: stableId(filePath),
|
|
499
|
+
path: fileRow.path,
|
|
500
|
+
language: fileRow.language,
|
|
501
|
+
lineCount: fileRow.lineCount,
|
|
502
|
+
parseStatus: fileRow.parseStatus,
|
|
503
|
+
sizeBytes: fileRow.sizeBytes,
|
|
504
|
+
mimeType: fileRow.mimeType,
|
|
505
|
+
extension: fileRow.extension,
|
|
506
|
+
importParseStatus: "completed",
|
|
507
|
+
},
|
|
508
|
+
imports: importRows.map((imp) => ({
|
|
509
|
+
id: stableId(filePath, "import", imp.localKey),
|
|
510
|
+
moduleSpecifier: imp.moduleSpecifier,
|
|
511
|
+
importKind: imp.importKind,
|
|
512
|
+
isResolved: Boolean(imp.targetPathText),
|
|
513
|
+
resolutionKind: imp.resolutionKind,
|
|
514
|
+
targetPathText: imp.targetPathText,
|
|
515
|
+
targetExternalSymbolKey: imp.targetExternalSymbolKey,
|
|
516
|
+
startLine: imp.line,
|
|
517
|
+
startCol: imp.col,
|
|
518
|
+
endLine: imp.endLine,
|
|
519
|
+
endCol: imp.endCol,
|
|
520
|
+
})),
|
|
521
|
+
importedBy: importedByRows.map((ib) => ({
|
|
522
|
+
sourceFilePath: ib.sourceFilePath,
|
|
523
|
+
moduleSpecifier: ib.moduleSpecifier,
|
|
524
|
+
importKind: ib.importKind,
|
|
525
|
+
resolutionKind: ib.resolutionKind,
|
|
526
|
+
startLine: ib.startLine,
|
|
527
|
+
startCol: ib.startCol,
|
|
528
|
+
endLine: ib.endLine,
|
|
529
|
+
endCol: ib.endCol,
|
|
530
|
+
})),
|
|
531
|
+
exports: exportRows.map((exp) => {
|
|
532
|
+
const sym = exp.symbolLocalKey ? (symbolByLocalKey.get(exp.symbolLocalKey) ?? null) : null;
|
|
533
|
+
return {
|
|
534
|
+
id: stableId(filePath, "export", exp.exportName, exp.line, exp.col),
|
|
535
|
+
symbolId: sym ? stableId(filePath, sym.stableKey) : null,
|
|
536
|
+
exportName: exp.exportName,
|
|
537
|
+
exportKind: exp.exportKind,
|
|
538
|
+
symbolDisplayName: sym?.displayName ?? null,
|
|
539
|
+
sourceModuleSpecifier: null,
|
|
540
|
+
symbolStartLine: sym?.line ?? null,
|
|
541
|
+
symbolStartCol: sym?.col ?? null,
|
|
542
|
+
symbolEndLine: sym?.endLine ?? null,
|
|
543
|
+
symbolEndCol: sym?.endCol ?? null,
|
|
544
|
+
startLine: exp.line,
|
|
545
|
+
startCol: exp.col,
|
|
546
|
+
endLine: exp.endLine,
|
|
547
|
+
endCol: exp.endCol,
|
|
548
|
+
};
|
|
549
|
+
}),
|
|
550
|
+
symbols: symbolRows.map((sym) => {
|
|
551
|
+
const parent = sym.parentSymbolLocalKey
|
|
552
|
+
? (symbolByLocalKey.get(sym.parentSymbolLocalKey) ?? null)
|
|
553
|
+
: null;
|
|
554
|
+
return {
|
|
555
|
+
id: stableId(filePath, sym.stableKey),
|
|
556
|
+
displayName: sym.displayName,
|
|
557
|
+
kind: sym.kind,
|
|
558
|
+
signature: sym.signature,
|
|
559
|
+
returnType: sym.returnType,
|
|
560
|
+
doc: sym.doc,
|
|
561
|
+
heritage: [],
|
|
562
|
+
isExported: sym.isExported === 1,
|
|
563
|
+
parentSymbolName: parent?.displayName ?? null,
|
|
564
|
+
startLine: sym.line,
|
|
565
|
+
startCol: sym.col,
|
|
566
|
+
endLine: sym.endLine,
|
|
567
|
+
endCol: sym.endCol,
|
|
568
|
+
};
|
|
569
|
+
}),
|
|
570
|
+
blastRadius: {
|
|
571
|
+
totalCount: importedByRows.length,
|
|
572
|
+
directCount: importedByRows.length,
|
|
573
|
+
maxDepth: importedByRows.length > 0 ? 1 : 0,
|
|
574
|
+
hasCycles: false,
|
|
575
|
+
files: blastRadiusRows.map((r) => ({
|
|
576
|
+
path: r.sourceFilePath,
|
|
577
|
+
language: r.language,
|
|
578
|
+
depth: 1,
|
|
579
|
+
incomingCount: r.incomingCount,
|
|
580
|
+
outgoingCount: r.outgoingCount,
|
|
581
|
+
})),
|
|
582
|
+
},
|
|
583
|
+
cycles: [],
|
|
584
|
+
};
|
|
585
|
+
}
|
|
586
|
+
hasCycle(filePath) {
|
|
587
|
+
try {
|
|
588
|
+
const result = this.db
|
|
589
|
+
.prepare(`WITH RECURSIVE reachable(p) AS (
|
|
590
|
+
SELECT targetPathText FROM imports
|
|
591
|
+
WHERE filePath = ? AND targetPathText IS NOT NULL AND targetPathText != ?
|
|
592
|
+
UNION
|
|
593
|
+
SELECT i.targetPathText FROM imports i
|
|
594
|
+
INNER JOIN reachable r ON i.filePath = r.p
|
|
595
|
+
WHERE i.targetPathText IS NOT NULL
|
|
596
|
+
)
|
|
597
|
+
SELECT 1 FROM reachable WHERE p = ? LIMIT 1`)
|
|
598
|
+
.get(filePath, filePath, filePath);
|
|
599
|
+
return result != null;
|
|
600
|
+
}
|
|
601
|
+
catch {
|
|
602
|
+
return false;
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
close() {
|
|
606
|
+
this.db.close();
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
//# sourceMappingURL=sqlite-index-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-index-store.js","sourceRoot":"","sources":["../../src/lib/sqlite-index-store.ts"],"names":[],"mappings":"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"}
|