@nithin554/code-crawler 0.1.54 → 0.1.56

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.
@@ -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,23 +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
- CREATE INDEX IF NOT EXISTS idx_edges_source ON edges (source);
43
- CREATE INDEX IF NOT EXISTS idx_edges_target ON edges (target);
44
- CREATE INDEX IF NOT EXISTS idx_edges_kind ON edges (kind);
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
+ `;
51
104
  /**
52
105
  * Bumped whenever a migration below changes the on-disk shape. Databases
53
106
  * created before versioning was introduced are stamped at this version when
54
107
  * first opened, because the schema is already idempotent.
55
108
  */
56
- const SCHEMA_VERSION = 1;
109
+ const SCHEMA_VERSION = 2;
57
110
  /** Ordered, idempotent upgrades. Append new entries; never rewrite history. */
58
- const MIGRATIONS = [];
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
+ }
59
145
  export class GraphStore {
60
146
  db;
61
147
  /** Default cap on transitive traversal depth (config override). */
@@ -76,28 +162,31 @@ export class GraphStore {
76
162
  this.db.pragma("journal_mode = WAL");
77
163
  this.db.pragma("foreign_keys = ON");
78
164
  this.db.exec(SCHEMA);
79
- this.insertNodeStmt = this.db.prepare(`
80
- INSERT INTO nodes (id, kind, qualified_name, file_path, properties)
81
- VALUES (@id, @kind, @qualifiedName, @filePath, @properties)
82
- ON CONFLICT (id) DO UPDATE SET
83
- kind = excluded.kind,
84
- qualified_name = excluded.qualified_name,
85
- file_path = excluded.file_path,
86
- properties = excluded.properties,
87
- updated_at = unixepoch()
88
- `);
89
- this.insertEdgeStmt = this.db.prepare(`
90
- INSERT INTO edges (source, target, kind, properties)
91
- VALUES (@source, @target, @kind, @properties)
92
- ON CONFLICT (source, target, kind) DO UPDATE SET
93
- properties = excluded.properties,
94
- created_at = unixepoch()
95
- `);
96
- this.deleteFileNodesStmt = this.db.prepare("DELETE FROM nodes WHERE file_path = ?");
97
- this.updateMetaStmt = this.db.prepare(`INSERT INTO crawl_meta (key, value) VALUES (@key, @value)
98
- ON CONFLICT (key) DO UPDATE SET value = excluded.value`);
99
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`);
100
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 = ?");
101
190
  }
102
191
  catch (err) {
103
192
  // A failed open must not keep the SQLite handle (and its WAL files)
@@ -144,6 +233,7 @@ export class GraphStore {
144
233
  id: node.id,
145
234
  kind: node.kind,
146
235
  qualifiedName: node.qualifiedName,
236
+ name: node.properties.name ?? displayName(node.qualifiedName),
147
237
  filePath: node.filePath,
148
238
  properties: JSON.stringify(node.properties),
149
239
  });
@@ -210,6 +300,60 @@ export class GraphStore {
210
300
  */
211
301
  removeFile(filePath) {
212
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;
213
357
  }
214
358
  /**
215
359
  * Delete file-less shared nodes (package, annotation, external symbol) that
@@ -296,7 +440,7 @@ export class GraphStore {
296
440
  }
297
441
  clearAll() {
298
442
  const tx = this.db.transaction(() => {
299
- 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;");
300
444
  this.setMeta("schema_version", String(SCHEMA_VERSION));
301
445
  });
302
446
  tx();
@@ -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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"}
@@ -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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"}