@nithin554/code-crawler 0.1.53 → 0.1.55
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 +108 -5
- package/dist/config.d.ts +4 -0
- package/dist/config.js +40 -9
- package/dist/config.js.map +1 -1
- package/dist/crawler.d.ts +42 -2
- package/dist/crawler.js +236 -32
- package/dist/crawler.js.map +1 -1
- package/dist/graph/queries.d.ts +8 -5
- package/dist/graph/queries.js +101 -44
- package/dist/graph/queries.js.map +1 -1
- package/dist/graph/store.d.ts +31 -1
- package/dist/graph/store.js +217 -24
- package/dist/graph/store.js.map +1 -1
- package/dist/index.js +24 -1
- package/dist/index.js.map +1 -1
- package/dist/parser/cache.d.ts +28 -0
- package/dist/parser/cache.js +80 -0
- package/dist/parser/cache.js.map +1 -0
- package/dist/parser/language.d.ts +2 -0
- package/dist/server.js +78 -36
- package/dist/server.js.map +1 -1
- package/package.json +4 -2
package/dist/graph/store.js
CHANGED
|
@@ -19,6 +19,7 @@ CREATE TABLE IF NOT EXISTS nodes (
|
|
|
19
19
|
id TEXT PRIMARY KEY,
|
|
20
20
|
kind TEXT NOT NULL,
|
|
21
21
|
qualified_name TEXT NOT NULL,
|
|
22
|
+
name TEXT,
|
|
22
23
|
file_path TEXT,
|
|
23
24
|
properties TEXT NOT NULL DEFAULT '{}',
|
|
24
25
|
updated_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
@@ -39,15 +40,108 @@ CREATE TABLE IF NOT EXISTS edges (
|
|
|
39
40
|
FOREIGN KEY (source) REFERENCES nodes (id) ON DELETE CASCADE,
|
|
40
41
|
FOREIGN KEY (target) REFERENCES nodes (id) ON DELETE CASCADE
|
|
41
42
|
);
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
CREATE INDEX IF NOT EXISTS
|
|
43
|
+
-- Traversals always filter on one endpoint *and* an edge-kind list, so the
|
|
44
|
+
-- composite indexes replace the single-column ones of schema version 1.
|
|
45
|
+
CREATE INDEX IF NOT EXISTS idx_edges_source_kind ON edges (source, kind);
|
|
46
|
+
CREATE INDEX IF NOT EXISTS idx_edges_target_kind ON edges (target, kind);
|
|
47
|
+
CREATE INDEX IF NOT EXISTS idx_edges_kind ON edges (kind);
|
|
45
48
|
|
|
46
49
|
CREATE TABLE IF NOT EXISTS crawl_meta (
|
|
47
50
|
key TEXT PRIMARY KEY,
|
|
48
51
|
value TEXT
|
|
49
52
|
);
|
|
50
53
|
`;
|
|
54
|
+
/**
|
|
55
|
+
* Full-text index over node names. External-content FTS5 keeps the text in
|
|
56
|
+
* `nodes` (no duplication) and triggers keep the index in sync with every
|
|
57
|
+
* write path, including cascading deletes.
|
|
58
|
+
*/
|
|
59
|
+
const FTS_SCHEMA = `
|
|
60
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS nodes_fts USING fts5(
|
|
61
|
+
id,
|
|
62
|
+
qualified_name,
|
|
63
|
+
name,
|
|
64
|
+
content='nodes',
|
|
65
|
+
content_rowid='rowid',
|
|
66
|
+
tokenize='unicode61'
|
|
67
|
+
);
|
|
68
|
+
CREATE TRIGGER IF NOT EXISTS nodes_fts_ai AFTER INSERT ON nodes BEGIN
|
|
69
|
+
INSERT INTO nodes_fts (rowid, id, qualified_name, name)
|
|
70
|
+
VALUES (new.rowid, new.id, new.qualified_name, COALESCE(new.name, ''));
|
|
71
|
+
END;
|
|
72
|
+
CREATE TRIGGER IF NOT EXISTS nodes_fts_ad AFTER DELETE ON nodes BEGIN
|
|
73
|
+
INSERT INTO nodes_fts (nodes_fts, rowid, id, qualified_name, name)
|
|
74
|
+
VALUES ('delete', old.rowid, old.id, old.qualified_name, COALESCE(old.name, ''));
|
|
75
|
+
END;
|
|
76
|
+
CREATE TRIGGER IF NOT EXISTS nodes_fts_au AFTER UPDATE ON nodes BEGIN
|
|
77
|
+
INSERT INTO nodes_fts (nodes_fts, rowid, id, qualified_name, name)
|
|
78
|
+
VALUES ('delete', old.rowid, old.id, old.qualified_name, COALESCE(old.name, ''));
|
|
79
|
+
INSERT INTO nodes_fts (rowid, id, qualified_name, name)
|
|
80
|
+
VALUES (new.rowid, new.id, new.qualified_name, COALESCE(new.name, ''));
|
|
81
|
+
END;
|
|
82
|
+
`;
|
|
83
|
+
/** Per-file crawl manifest: change detection plus the cached parse result. */
|
|
84
|
+
const FILES_SCHEMA = `
|
|
85
|
+
CREATE TABLE IF NOT EXISTS files (
|
|
86
|
+
path TEXT PRIMARY KEY,
|
|
87
|
+
size INTEGER NOT NULL,
|
|
88
|
+
mtime_ms INTEGER NOT NULL,
|
|
89
|
+
sha256 TEXT NOT NULL,
|
|
90
|
+
language TEXT NOT NULL,
|
|
91
|
+
summary TEXT,
|
|
92
|
+
indexed_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
93
|
+
);
|
|
94
|
+
`;
|
|
95
|
+
/** Indexes that match the shapes the query layer actually asks for. */
|
|
96
|
+
const QUERY_INDEXES = `
|
|
97
|
+
CREATE INDEX IF NOT EXISTS idx_nodes_name_col ON nodes (name);
|
|
98
|
+
CREATE INDEX IF NOT EXISTS idx_edges_source_kind ON edges (source, kind);
|
|
99
|
+
CREATE INDEX IF NOT EXISTS idx_edges_target_kind ON edges (target, kind);
|
|
100
|
+
-- find_entry_points used to scan every node through json_extract().
|
|
101
|
+
CREATE INDEX IF NOT EXISTS idx_nodes_entry_point
|
|
102
|
+
ON nodes (json_extract(properties, '$.entryPoint'));
|
|
103
|
+
`;
|
|
104
|
+
/**
|
|
105
|
+
* Bumped whenever a migration below changes the on-disk shape. Databases
|
|
106
|
+
* created before versioning was introduced are stamped at this version when
|
|
107
|
+
* first opened, because the schema is already idempotent.
|
|
108
|
+
*/
|
|
109
|
+
const SCHEMA_VERSION = 2;
|
|
110
|
+
/** Ordered, idempotent upgrades. Append new entries; never rewrite history. */
|
|
111
|
+
const MIGRATIONS = [
|
|
112
|
+
{
|
|
113
|
+
version: 2,
|
|
114
|
+
up(db) {
|
|
115
|
+
db.exec(FILES_SCHEMA);
|
|
116
|
+
const columns = db.prepare("PRAGMA table_info(nodes)").all();
|
|
117
|
+
if (!columns.some((c) => c.name === "name")) {
|
|
118
|
+
db.exec("ALTER TABLE nodes ADD COLUMN name TEXT");
|
|
119
|
+
}
|
|
120
|
+
// Backfill the denormalised display name for rows written by v1.
|
|
121
|
+
const pending = db
|
|
122
|
+
.prepare("SELECT rowid AS rid, qualified_name AS qn FROM nodes WHERE name IS NULL")
|
|
123
|
+
.all();
|
|
124
|
+
if (pending.length > 0) {
|
|
125
|
+
const update = db.prepare("UPDATE nodes SET name = ? WHERE rowid = ?");
|
|
126
|
+
for (const row of pending)
|
|
127
|
+
update.run(displayName(row.qn), row.rid);
|
|
128
|
+
}
|
|
129
|
+
db.exec("DROP INDEX IF EXISTS idx_edges_source; DROP INDEX IF EXISTS idx_edges_target;");
|
|
130
|
+
db.exec(QUERY_INDEXES);
|
|
131
|
+
db.exec(FTS_SCHEMA);
|
|
132
|
+
// Populate the FTS index from existing content (no-op on a fresh DB).
|
|
133
|
+
db.exec("INSERT INTO nodes_fts (nodes_fts) VALUES ('rebuild')");
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
];
|
|
137
|
+
/** The short display name: the last `#` or `.` segment of a qualified name. */
|
|
138
|
+
function displayName(qualifiedName) {
|
|
139
|
+
const hash = qualifiedName.lastIndexOf("#");
|
|
140
|
+
if (hash >= 0)
|
|
141
|
+
return qualifiedName.slice(hash + 1);
|
|
142
|
+
const dot = qualifiedName.lastIndexOf(".");
|
|
143
|
+
return dot >= 0 ? qualifiedName.slice(dot + 1) : qualifiedName;
|
|
144
|
+
}
|
|
51
145
|
export class GraphStore {
|
|
52
146
|
db;
|
|
53
147
|
/** Default cap on transitive traversal depth (config override). */
|
|
@@ -68,26 +162,65 @@ export class GraphStore {
|
|
|
68
162
|
this.db.pragma("journal_mode = WAL");
|
|
69
163
|
this.db.pragma("foreign_keys = ON");
|
|
70
164
|
this.db.exec(SCHEMA);
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
165
|
+
try {
|
|
166
|
+
// Migrations may add columns the prepared statements below depend on, so
|
|
167
|
+
// they must run first. Only the meta statement is safe before them.
|
|
168
|
+
this.updateMetaStmt = this.db.prepare(`INSERT INTO crawl_meta (key, value) VALUES (@key, @value)
|
|
169
|
+
ON CONFLICT (key) DO UPDATE SET value = excluded.value`);
|
|
170
|
+
this.migrate();
|
|
171
|
+
this.insertNodeStmt = this.db.prepare(`
|
|
172
|
+
INSERT INTO nodes (id, kind, qualified_name, name, file_path, properties)
|
|
173
|
+
VALUES (@id, @kind, @qualifiedName, @name, @filePath, @properties)
|
|
174
|
+
ON CONFLICT (id) DO UPDATE SET
|
|
175
|
+
kind = excluded.kind,
|
|
176
|
+
qualified_name = excluded.qualified_name,
|
|
177
|
+
name = excluded.name,
|
|
178
|
+
file_path = excluded.file_path,
|
|
179
|
+
properties = excluded.properties,
|
|
180
|
+
updated_at = unixepoch()
|
|
181
|
+
`);
|
|
182
|
+
this.insertEdgeStmt = this.db.prepare(`
|
|
183
|
+
INSERT INTO edges (source, target, kind, properties)
|
|
184
|
+
VALUES (@source, @target, @kind, @properties)
|
|
185
|
+
ON CONFLICT (source, target, kind) DO UPDATE SET
|
|
186
|
+
properties = excluded.properties,
|
|
187
|
+
created_at = unixepoch()
|
|
188
|
+
`);
|
|
189
|
+
this.deleteFileNodesStmt = this.db.prepare("DELETE FROM nodes WHERE file_path = ?");
|
|
190
|
+
}
|
|
191
|
+
catch (err) {
|
|
192
|
+
// A failed open must not keep the SQLite handle (and its WAL files)
|
|
193
|
+
// alive, or the offending database cannot even be deleted by the user.
|
|
194
|
+
this.db.close();
|
|
195
|
+
throw err;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Bring the database up to SCHEMA_VERSION, or fail loudly when it was
|
|
200
|
+
* written by a newer build. Never silently tolerate an unknown shape.
|
|
201
|
+
*/
|
|
202
|
+
migrate() {
|
|
203
|
+
const stored = this.getMeta("schema_version");
|
|
204
|
+
const found = stored === null ? 0 : Number.parseInt(stored, 10);
|
|
205
|
+
if (!Number.isInteger(found) || found < 0) {
|
|
206
|
+
throw new Error(`index has an unreadable schema_version (${JSON.stringify(stored)}); ` +
|
|
207
|
+
`run clear_index and crawl again`);
|
|
208
|
+
}
|
|
209
|
+
if (found > SCHEMA_VERSION) {
|
|
210
|
+
throw new Error(`index schema version ${found} is newer than this build supports (${SCHEMA_VERSION}); ` +
|
|
211
|
+
`upgrade code-crawler or point CODECRAWLER_DB at a separate database`);
|
|
212
|
+
}
|
|
213
|
+
for (const migration of MIGRATIONS) {
|
|
214
|
+
if (migration.version <= found)
|
|
215
|
+
continue;
|
|
216
|
+
migration.up(this.db);
|
|
217
|
+
this.setMeta("schema_version", String(migration.version));
|
|
218
|
+
}
|
|
219
|
+
this.setMeta("schema_version", String(SCHEMA_VERSION));
|
|
220
|
+
}
|
|
221
|
+
/** Schema version stamped into this database. */
|
|
222
|
+
get schemaVersion() {
|
|
223
|
+
return SCHEMA_VERSION;
|
|
91
224
|
}
|
|
92
225
|
close() {
|
|
93
226
|
this.db.close();
|
|
@@ -100,6 +233,7 @@ export class GraphStore {
|
|
|
100
233
|
id: node.id,
|
|
101
234
|
kind: node.kind,
|
|
102
235
|
qualifiedName: node.qualifiedName,
|
|
236
|
+
name: node.properties.name ?? displayName(node.qualifiedName),
|
|
103
237
|
filePath: node.filePath,
|
|
104
238
|
properties: JSON.stringify(node.properties),
|
|
105
239
|
});
|
|
@@ -166,6 +300,60 @@ export class GraphStore {
|
|
|
166
300
|
*/
|
|
167
301
|
removeFile(filePath) {
|
|
168
302
|
this.deleteFileNodesStmt.run(filePath);
|
|
303
|
+
this.db.prepare("DELETE FROM files WHERE path = ?").run(filePath);
|
|
304
|
+
}
|
|
305
|
+
/** Crawl manifest of every indexed file, keyed by absolute path. */
|
|
306
|
+
listFileRecords() {
|
|
307
|
+
const rows = this.db
|
|
308
|
+
.prepare("SELECT path, size, mtime_ms, sha256, language, summary FROM files")
|
|
309
|
+
.all();
|
|
310
|
+
const out = new Map();
|
|
311
|
+
for (const row of rows) {
|
|
312
|
+
out.set(row.path, {
|
|
313
|
+
path: row.path,
|
|
314
|
+
size: row.size,
|
|
315
|
+
mtimeMs: row.mtime_ms,
|
|
316
|
+
sha256: row.sha256,
|
|
317
|
+
language: row.language,
|
|
318
|
+
summary: row.summary,
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
return out;
|
|
322
|
+
}
|
|
323
|
+
putFileRecord(record) {
|
|
324
|
+
this.db
|
|
325
|
+
.prepare(`INSERT INTO files (path, size, mtime_ms, sha256, language, summary, indexed_at)
|
|
326
|
+
VALUES (@path, @size, @mtimeMs, @sha256, @language, @summary, unixepoch())
|
|
327
|
+
ON CONFLICT (path) DO UPDATE SET
|
|
328
|
+
size = excluded.size,
|
|
329
|
+
mtime_ms = excluded.mtime_ms,
|
|
330
|
+
sha256 = excluded.sha256,
|
|
331
|
+
language = excluded.language,
|
|
332
|
+
summary = excluded.summary,
|
|
333
|
+
indexed_at = unixepoch()`)
|
|
334
|
+
.run({
|
|
335
|
+
path: record.path,
|
|
336
|
+
size: record.size,
|
|
337
|
+
mtimeMs: record.mtimeMs,
|
|
338
|
+
sha256: record.sha256,
|
|
339
|
+
language: record.language,
|
|
340
|
+
summary: record.summary,
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Flag a symbol as a framework-invoked entry point without rewriting the
|
|
345
|
+
* rest of its properties. Used for symbols in files that were not re-parsed,
|
|
346
|
+
* whose persisted row still needs the cross-file route annotation.
|
|
347
|
+
*/
|
|
348
|
+
markEntryPoint(id, kind, detail) {
|
|
349
|
+
const info = this.db
|
|
350
|
+
.prepare(`UPDATE nodes
|
|
351
|
+
SET properties = json_set(properties, '$.entryPoint', json('true'),
|
|
352
|
+
'$.entryPointKind', ?, '$.entryPointDetail', ?),
|
|
353
|
+
updated_at = unixepoch()
|
|
354
|
+
WHERE id = ? AND COALESCE(json_extract(properties, '$.entryPoint'), 0) <> 1`)
|
|
355
|
+
.run(kind, detail, id);
|
|
356
|
+
return info.changes > 0;
|
|
169
357
|
}
|
|
170
358
|
/**
|
|
171
359
|
* Delete file-less shared nodes (package, annotation, external symbol) that
|
|
@@ -252,7 +440,8 @@ export class GraphStore {
|
|
|
252
440
|
}
|
|
253
441
|
clearAll() {
|
|
254
442
|
const tx = this.db.transaction(() => {
|
|
255
|
-
this.db.exec("DELETE FROM edges; DELETE FROM nodes; DELETE FROM crawl_meta;");
|
|
443
|
+
this.db.exec("DELETE FROM edges; DELETE FROM nodes; DELETE FROM files; DELETE FROM crawl_meta;");
|
|
444
|
+
this.setMeta("schema_version", String(SCHEMA_VERSION));
|
|
256
445
|
});
|
|
257
446
|
tx();
|
|
258
447
|
}
|
|
@@ -270,6 +459,10 @@ export class GraphStore {
|
|
|
270
459
|
* Store and expose tree-sitter-compatible positions (0-based line) and let
|
|
271
460
|
* the presentation layer add +1 where humans expect 1-based lines.
|
|
272
461
|
*/
|
|
462
|
+
/**
|
|
463
|
+
* Escape hatch for ad-hoc SQL. The row shape is the caller's contract, so
|
|
464
|
+
* pass it as a type parameter instead of casting the result at every call.
|
|
465
|
+
*/
|
|
273
466
|
raw(sql, ...params) {
|
|
274
467
|
return this.db.prepare(sql).all(...params);
|
|
275
468
|
}
|
package/dist/graph/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/graph/store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/graph/store.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -28,6 +28,8 @@ Environment:
|
|
|
28
28
|
CODECRAWLER_EXCLUDE_DIRS Comma-separated dirs to skip during crawl
|
|
29
29
|
CODECRAWLER_DEFAULT_LIMIT Default result limit for list queries
|
|
30
30
|
CODECRAWLER_MAX_DEPTH Traversal depth cap
|
|
31
|
+
CODECRAWLER_MAX_FILE_BYTES Skip source files larger than this (default 1000000)
|
|
32
|
+
CODECRAWLER_RESPECT_GITIGNORE Honor .gitignore during crawl (default true)
|
|
31
33
|
`);
|
|
32
34
|
}
|
|
33
35
|
function makeStore(config) {
|
|
@@ -59,11 +61,32 @@ export async function main(argv = process.argv.slice(2)) {
|
|
|
59
61
|
}
|
|
60
62
|
const store = makeStore(config);
|
|
61
63
|
try {
|
|
62
|
-
|
|
64
|
+
let lastBucket = -1;
|
|
65
|
+
const result = await crawlProject(store, target, config.excludeDirs, {
|
|
66
|
+
respectGitignore: config.respectGitignore,
|
|
67
|
+
maxFileBytes: config.maxFileBytes,
|
|
68
|
+
onProgress: (progress) => {
|
|
69
|
+
const percent = progress.total === 0 ? 100 : Math.floor((progress.processed / progress.total) * 100);
|
|
70
|
+
const bucket = Math.floor(percent / 10);
|
|
71
|
+
if (bucket === lastBucket)
|
|
72
|
+
return;
|
|
73
|
+
lastBucket = bucket;
|
|
74
|
+
console.error(`code-crawler: ${progress.phase} ${percent}% (${progress.processed}/${progress.total})`);
|
|
75
|
+
},
|
|
76
|
+
});
|
|
63
77
|
console.error(`code-crawler: indexed ${result.filesParsed}/${result.filesScanned} files ` +
|
|
64
78
|
`(${result.nodes} nodes, ${result.edges} edges, ` +
|
|
65
79
|
`${result.resolvedCalls} resolved / ${result.unresolvedCalls} unresolved calls) ` +
|
|
66
80
|
`in ${result.durationMs}ms`);
|
|
81
|
+
if (result.filesSkipped > 0) {
|
|
82
|
+
console.error(`code-crawler: skipped ${result.filesSkipped} file(s) (too large or binary)`);
|
|
83
|
+
}
|
|
84
|
+
for (const failure of result.parseErrors.slice(0, 10)) {
|
|
85
|
+
console.error(`code-crawler: parse failed: ${failure}`);
|
|
86
|
+
}
|
|
87
|
+
if (result.parseErrors.length > 10) {
|
|
88
|
+
console.error(`code-crawler: ...and ${result.parseErrors.length - 10} more parse failure(s)`);
|
|
89
|
+
}
|
|
67
90
|
}
|
|
68
91
|
catch (err) {
|
|
69
92
|
console.error(`code-crawler: ${err.message}`);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,UAAU,EAAe,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;;;;;GAMG;AAEH,SAAS,KAAK;IACZ,OAAO,CAAC,GAAG,CAAC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ParsedFile } from "./language.js";
|
|
2
|
+
/**
|
|
3
|
+
* Serialisation for the per-file parse cache.
|
|
4
|
+
*
|
|
5
|
+
* `ParsedFile` carries `Map` instances, which `JSON.stringify` silently
|
|
6
|
+
* flattens to `{}`. Packing converts them to plain objects so an unchanged
|
|
7
|
+
* file can be replayed from the crawl manifest instead of being parsed again.
|
|
8
|
+
*
|
|
9
|
+
* Only plain data is stored: nothing here may grow a function, class instance
|
|
10
|
+
* or cyclic reference, or the cache becomes lossy.
|
|
11
|
+
*/
|
|
12
|
+
interface PackedParsedFile extends Omit<ParsedFile, "localsByMethod" | "scopeTypes" | "scopeModules" | "externalModules"> {
|
|
13
|
+
localsByMethod: Record<string, Record<string, string>>;
|
|
14
|
+
scopeTypes?: Record<string, string>;
|
|
15
|
+
scopeModules?: Record<string, string>;
|
|
16
|
+
externalModules?: Record<string, string>;
|
|
17
|
+
/** Java files expose a simple-name -> FQN map (usually `scopeTypes`). */
|
|
18
|
+
typeByName?: Record<string, string>;
|
|
19
|
+
}
|
|
20
|
+
/** Convert a parsed file into a JSON-safe value. */
|
|
21
|
+
export declare function packParsedFile(parsed: ParsedFile): PackedParsedFile;
|
|
22
|
+
/** Restore a parsed file written by {@link packParsedFile}. */
|
|
23
|
+
export declare function unpackParsedFile(packed: PackedParsedFile): ParsedFile;
|
|
24
|
+
/** Serialise a parsed file for storage in the crawl manifest. */
|
|
25
|
+
export declare function encodeParsedFile(parsed: ParsedFile): string;
|
|
26
|
+
/** Decode a manifest summary; returns null when the payload is unusable. */
|
|
27
|
+
export declare function decodeParsedFile(json: string | null): ParsedFile | null;
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
function mapToRecord(map) {
|
|
2
|
+
if (!map)
|
|
3
|
+
return undefined;
|
|
4
|
+
const out = {};
|
|
5
|
+
for (const [key, value] of map)
|
|
6
|
+
out[key] = value;
|
|
7
|
+
return out;
|
|
8
|
+
}
|
|
9
|
+
function recordToMap(record) {
|
|
10
|
+
const out = new Map();
|
|
11
|
+
for (const [key, value] of Object.entries(record ?? {}))
|
|
12
|
+
out.set(key, value);
|
|
13
|
+
return out;
|
|
14
|
+
}
|
|
15
|
+
/** Value equality for two optional string records. */
|
|
16
|
+
function sameRecord(a, b) {
|
|
17
|
+
if (!a || !b)
|
|
18
|
+
return a === b;
|
|
19
|
+
const keys = Object.keys(a);
|
|
20
|
+
if (keys.length !== Object.keys(b).length)
|
|
21
|
+
return false;
|
|
22
|
+
return keys.every((key) => a[key] === b[key]);
|
|
23
|
+
}
|
|
24
|
+
/** Convert a parsed file into a JSON-safe value. */
|
|
25
|
+
export function packParsedFile(parsed) {
|
|
26
|
+
const locals = {};
|
|
27
|
+
for (const [methodId, localsByMethod] of parsed.localsByMethod) {
|
|
28
|
+
locals[methodId] = mapToRecord(localsByMethod) ?? {};
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
...parsed,
|
|
32
|
+
localsByMethod: locals,
|
|
33
|
+
scopeTypes: mapToRecord(parsed.scopeTypes),
|
|
34
|
+
scopeModules: mapToRecord(parsed.scopeModules),
|
|
35
|
+
externalModules: mapToRecord(parsed.externalModules),
|
|
36
|
+
typeByName: mapToRecord(parsed.typeByName),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/** Restore a parsed file written by {@link packParsedFile}. */
|
|
40
|
+
export function unpackParsedFile(packed) {
|
|
41
|
+
const localsByMethod = new Map();
|
|
42
|
+
for (const [methodId, locals] of Object.entries(packed.localsByMethod ?? {})) {
|
|
43
|
+
localsByMethod.set(methodId, recordToMap(locals));
|
|
44
|
+
}
|
|
45
|
+
const scopeTypes = recordToMap(packed.scopeTypes);
|
|
46
|
+
const parsed = {
|
|
47
|
+
...packed,
|
|
48
|
+
localsByMethod,
|
|
49
|
+
scopeTypes,
|
|
50
|
+
scopeModules: recordToMap(packed.scopeModules),
|
|
51
|
+
externalModules: recordToMap(packed.externalModules),
|
|
52
|
+
};
|
|
53
|
+
if (packed.typeByName) {
|
|
54
|
+
// Java sets `typeByName` to the very same map as `scopeTypes`; keep the
|
|
55
|
+
// aliasing so the resolver sees the object shape a fresh parse produces.
|
|
56
|
+
parsed.typeByName = sameRecord(packed.typeByName, packed.scopeTypes)
|
|
57
|
+
? scopeTypes
|
|
58
|
+
: recordToMap(packed.typeByName);
|
|
59
|
+
}
|
|
60
|
+
return parsed;
|
|
61
|
+
}
|
|
62
|
+
/** Serialise a parsed file for storage in the crawl manifest. */
|
|
63
|
+
export function encodeParsedFile(parsed) {
|
|
64
|
+
return JSON.stringify(packParsedFile(parsed));
|
|
65
|
+
}
|
|
66
|
+
/** Decode a manifest summary; returns null when the payload is unusable. */
|
|
67
|
+
export function decodeParsedFile(json) {
|
|
68
|
+
if (!json)
|
|
69
|
+
return null;
|
|
70
|
+
try {
|
|
71
|
+
const packed = JSON.parse(json);
|
|
72
|
+
if (!packed || typeof packed.filePath !== "string")
|
|
73
|
+
return null;
|
|
74
|
+
return unpackParsedFile(packed);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/parser/cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -224,6 +224,8 @@ export interface ParsedFile {
|
|
|
224
224
|
routes?: RouteRegistration[];
|
|
225
225
|
/** Entry point when the whole file is one (e.g. `__main__` script). */
|
|
226
226
|
entryPoint?: EntryPointInfo;
|
|
227
|
+
/** Total source lines, when the crawler already read the file. */
|
|
228
|
+
lineCount?: number;
|
|
227
229
|
}
|
|
228
230
|
export interface ParseContext {
|
|
229
231
|
/** Project root, used to derive stable module ids. */
|