@aroman22/codegraph-vba-darwin-arm64 1.3.5 → 1.5.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.
Files changed (39) hide show
  1. package/lib/dist/extraction/index.d.ts.map +1 -1
  2. package/lib/dist/extraction/index.js +26 -7
  3. package/lib/dist/extraction/index.js.map +1 -1
  4. package/lib/dist/extraction/sql-query-extractor.d.ts +11 -3
  5. package/lib/dist/extraction/sql-query-extractor.d.ts.map +1 -1
  6. package/lib/dist/extraction/sql-query-extractor.js +19 -5
  7. package/lib/dist/extraction/sql-query-extractor.js.map +1 -1
  8. package/lib/dist/extraction/vba-extractor.d.ts +575 -55
  9. package/lib/dist/extraction/vba-extractor.d.ts.map +1 -1
  10. package/lib/dist/extraction/vba-extractor.js +1233 -135
  11. package/lib/dist/extraction/vba-extractor.js.map +1 -1
  12. package/lib/dist/extraction/vba-form-extractor.d.ts +127 -0
  13. package/lib/dist/extraction/vba-form-extractor.d.ts.map +1 -1
  14. package/lib/dist/extraction/vba-form-extractor.js +290 -3
  15. package/lib/dist/extraction/vba-form-extractor.js.map +1 -1
  16. package/lib/dist/extraction/vba-preprocess.d.ts +22 -3
  17. package/lib/dist/extraction/vba-preprocess.d.ts.map +1 -1
  18. package/lib/dist/extraction/vba-preprocess.js +137 -15
  19. package/lib/dist/extraction/vba-preprocess.js.map +1 -1
  20. package/lib/dist/extraction/vba-source.d.ts +58 -0
  21. package/lib/dist/extraction/vba-source.d.ts.map +1 -0
  22. package/lib/dist/extraction/vba-source.js +137 -0
  23. package/lib/dist/extraction/vba-source.js.map +1 -0
  24. package/lib/dist/types.d.ts +2 -2
  25. package/lib/dist/types.d.ts.map +1 -1
  26. package/lib/dist/types.js +6 -0
  27. package/lib/dist/types.js.map +1 -1
  28. package/lib/dist/utils/backtrace-helpers.d.ts +35 -0
  29. package/lib/dist/utils/backtrace-helpers.d.ts.map +1 -0
  30. package/lib/dist/utils/backtrace-helpers.js +129 -0
  31. package/lib/dist/utils/backtrace-helpers.js.map +1 -0
  32. package/lib/dist/utils/sql-impact-helpers.d.ts +38 -0
  33. package/lib/dist/utils/sql-impact-helpers.d.ts.map +1 -0
  34. package/lib/dist/utils/sql-impact-helpers.js +329 -0
  35. package/lib/dist/utils/sql-impact-helpers.js.map +1 -0
  36. package/lib/node_modules/.modules.yaml +2 -2
  37. package/lib/node_modules/.pnpm-workspace-state-v1.json +1 -1
  38. package/lib/package.json +2 -2
  39. package/package.json +1 -1
@@ -0,0 +1,329 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.traceVbaCallers = traceVbaCallers;
37
+ exports.extractFormBindings = extractFormBindings;
38
+ exports.resolveSqlLineage = resolveSqlLineage;
39
+ exports.runImpactAnalysis = runImpactAnalysis;
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ /**
43
+ * Traces references to the target query name inside a VBA module's content.
44
+ * Returns 1-based line numbers where references are found.
45
+ */
46
+ function traceVbaCallers(content, queryName) {
47
+ const lines = content.split(/\r?\n/);
48
+ const matchedLines = [];
49
+ // Escape query name for regex literal construction
50
+ const escapedQuery = queryName.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
51
+ // Match OpenRecordset("queryName") or OpenRecordset "queryName"
52
+ const openRecordsetRegex = new RegExp(`OpenRecordset\\s*(?:\\(\\s*["']${escapedQuery}["']|\\s+["']${escapedQuery}["'])`, 'i');
53
+ // Match QueryDefs("queryName")
54
+ const queryDefsRegex = new RegExp(`QueryDefs\\s*\\(\\s*["']${escapedQuery}["']`, 'i');
55
+ for (let i = 0; i < lines.length; i++) {
56
+ const line = lines[i];
57
+ if (line !== undefined && (openRecordsetRegex.test(line) || queryDefsRegex.test(line))) {
58
+ matchedLines.push(i + 1);
59
+ }
60
+ }
61
+ return matchedLines;
62
+ }
63
+ /**
64
+ * Parses a VBA form definition (.form.txt/.report.txt) and extracts RecordSource and RowSource bindings.
65
+ */
66
+ function extractFormBindings(content) {
67
+ const lines = content.split(/\r?\n/);
68
+ let recordSource;
69
+ const rowSources = [];
70
+ const stack = [];
71
+ for (const line of lines) {
72
+ const trimmed = line.trim();
73
+ // Check for start of form controls (e.g., Begin ComboBox, Begin Form)
74
+ const beginMatch = trimmed.match(/^Begin\s+(\w+)/i);
75
+ if (beginMatch && beginMatch[1] !== undefined) {
76
+ stack.push({ type: beginMatch[1] });
77
+ continue;
78
+ }
79
+ // Check for end of block
80
+ if (trimmed === 'End') {
81
+ stack.pop();
82
+ continue;
83
+ }
84
+ // Keep track of current control Name property
85
+ const nameMatch = trimmed.match(/Name\s*=\s*"([^"]+)"/i);
86
+ if (nameMatch && nameMatch[1] !== undefined && stack.length > 0) {
87
+ const current = stack[stack.length - 1];
88
+ if (current !== undefined) {
89
+ current.name = nameMatch[1];
90
+ }
91
+ }
92
+ // Extract RecordSource at Form level
93
+ const recordSourceMatch = trimmed.match(/RecordSource\s*=\s*"([^"]+)"/i);
94
+ if (recordSourceMatch && recordSourceMatch[1] !== undefined) {
95
+ recordSource = recordSourceMatch[1];
96
+ }
97
+ // Extract RowSource inside ComboBox/ListBox
98
+ const rowSourceMatch = trimmed.match(/RowSource\s*=\s*"([^"]+)"/i);
99
+ if (rowSourceMatch && rowSourceMatch[1] !== undefined && stack.length > 0) {
100
+ const rawVal = rowSourceMatch[1];
101
+ let target = rawVal;
102
+ // If it is a query (starts with SELECT), extract table/query name from the FROM clause
103
+ if (/select\s+/i.test(rawVal)) {
104
+ const fromMatch = rawVal.match(/from\s+([a-zA-Z0-9_]+)/i);
105
+ if (fromMatch && fromMatch[1] !== undefined) {
106
+ target = fromMatch[1];
107
+ }
108
+ }
109
+ const currentControl = stack[stack.length - 1];
110
+ if (currentControl !== undefined) {
111
+ const controlName = currentControl.name || currentControl.type;
112
+ rowSources.push({ control: controlName, target });
113
+ }
114
+ }
115
+ }
116
+ return { recordSource, rowSources };
117
+ }
118
+ /**
119
+ * Resolves table and column aliases from a SQL string to build a column-level lineage.
120
+ */
121
+ function resolveSqlLineage(sql) {
122
+ const normalized = sql.replace(/\s+/g, ' ');
123
+ const SQL_KEYWORDS = new Set([
124
+ 'as', 'on', 'inner', 'left', 'right', 'join', 'where', 'order', 'group', 'by',
125
+ 'and', 'or', 'select', 'from', 'using', 'cross', 'outer'
126
+ ]);
127
+ const aliasMap = new Map(); // alias lowercased -> table
128
+ const tables = new Set();
129
+ // Extract tables and aliases from FROM and JOIN clauses
130
+ const fromJoinPattern = /(?:from|join)\s+([a-zA-Z0-9_]+)(?:\s+as\s+([a-zA-Z0-9_]+)|\s+([a-zA-Z0-9_]+))?/gi;
131
+ let match;
132
+ while ((match = fromJoinPattern.exec(normalized)) !== null) {
133
+ const table = match[1];
134
+ if (table !== undefined) {
135
+ tables.add(table);
136
+ const alias = match[2] || match[3];
137
+ if (alias && !SQL_KEYWORDS.has(alias.toLowerCase())) {
138
+ aliasMap.set(alias.toLowerCase(), table);
139
+ }
140
+ // A table name can also qualify itself, e.g., tblTable.col
141
+ aliasMap.set(table.toLowerCase(), table);
142
+ }
143
+ }
144
+ // Extract column references (e.g., alias.col) and map to resolved tables
145
+ const colPattern = /\b([a-zA-Z0-9_]+)\.([a-zA-Z0-9_*]+)\b/g;
146
+ const lineageMap = new Map();
147
+ while ((match = colPattern.exec(normalized)) !== null) {
148
+ const prefix = match[1];
149
+ const col = match[2];
150
+ if (prefix !== undefined && col !== undefined) {
151
+ const source = `${prefix}.${col}`;
152
+ const resolvedTable = aliasMap.get(prefix.toLowerCase());
153
+ if (resolvedTable) {
154
+ lineageMap.set(source, `${resolvedTable}.${col}`);
155
+ }
156
+ }
157
+ }
158
+ const lineage = Array.from(lineageMap.entries()).map(([source, resolved]) => ({
159
+ source,
160
+ resolved
161
+ }));
162
+ return {
163
+ tables: Array.from(tables),
164
+ lineage
165
+ };
166
+ }
167
+ /**
168
+ * Internal recursive file finder.
169
+ */
170
+ function getAllFiles(dir) {
171
+ let results = [];
172
+ if (!fs.existsSync(dir))
173
+ return [];
174
+ const list = fs.readdirSync(dir);
175
+ for (const file of list) {
176
+ const filePath = path.join(dir, file);
177
+ const stat = fs.statSync(filePath);
178
+ if (stat && stat.isDirectory()) {
179
+ results = results.concat(getAllFiles(filePath));
180
+ }
181
+ else {
182
+ results.push(filePath);
183
+ }
184
+ }
185
+ return results;
186
+ }
187
+ /**
188
+ * Recursively queries the SQLite graph database backwards to find caller chain ancestors.
189
+ */
190
+ function findGraphAncestors(db, startNodeId) {
191
+ const visited = new Set();
192
+ const ancestors = [];
193
+ function traverse(nodeId) {
194
+ if (visited.has(nodeId))
195
+ return;
196
+ visited.add(nodeId);
197
+ const rows = db.prepare('SELECT source FROM edges WHERE target = ?').all(nodeId);
198
+ for (const row of rows) {
199
+ if (row.source !== undefined) {
200
+ ancestors.push(row.source);
201
+ traverse(row.source);
202
+ }
203
+ }
204
+ }
205
+ traverse(startNodeId);
206
+ return ancestors;
207
+ }
208
+ /**
209
+ * Runs a combined database and file-level downstream impact analysis.
210
+ */
211
+ function runImpactAnalysis(db, workspaceDir, queryName) {
212
+ const output = {
213
+ query_name: queryName,
214
+ callers: [],
215
+ form_bindings: [],
216
+ tables_touched: [],
217
+ lineage: [],
218
+ downstream_impact: {
219
+ queries: [queryName],
220
+ forms: [],
221
+ vba_callers: []
222
+ },
223
+ warnings: []
224
+ };
225
+ // 1. Resolve SQL lineage
226
+ const sqlPath = path.join(workspaceDir, 'queries', `${queryName}.sql`);
227
+ if (fs.existsSync(sqlPath)) {
228
+ const sql = fs.readFileSync(sqlPath, 'utf-8');
229
+ const sqlLin = resolveSqlLineage(sql);
230
+ output.tables_touched = sqlLin.tables;
231
+ output.lineage = sqlLin.lineage;
232
+ }
233
+ // 2. Scan and parse files
234
+ const allFiles = getAllFiles(workspaceDir);
235
+ const matchedForms = new Set();
236
+ for (const file of allFiles) {
237
+ const relativePath = path.relative(workspaceDir, file).replace(/\\/g, '/');
238
+ const ext = path.extname(file).toLowerCase();
239
+ // VBA files
240
+ if (['.bas', '.cls', '.frm'].includes(ext)) {
241
+ const content = fs.readFileSync(file, 'utf-8');
242
+ const lines = traceVbaCallers(content, queryName);
243
+ if (lines.length > 0) {
244
+ const baseName = path.basename(file);
245
+ if (!output.downstream_impact.vba_callers.includes(baseName)) {
246
+ output.downstream_impact.vba_callers.push(baseName);
247
+ }
248
+ const linesSplit = content.split(/\r?\n/);
249
+ for (const lineNum of lines) {
250
+ const contextLine = linesSplit[lineNum - 1];
251
+ output.callers.push({
252
+ file: relativePath,
253
+ line: lineNum,
254
+ context: contextLine !== undefined ? contextLine : ''
255
+ });
256
+ }
257
+ }
258
+ }
259
+ // Form/Report layout files
260
+ const lowerFile = file.toLowerCase();
261
+ const isFormOrReport = lowerFile.endsWith('.form.txt') || lowerFile.endsWith('.report.txt');
262
+ if (isFormOrReport) {
263
+ const content = fs.readFileSync(file, 'utf-8');
264
+ const bindings = extractFormBindings(content);
265
+ const formName = path.basename(file).replace(/\.(form|report)\.txt$/i, '');
266
+ let isFormBound = false;
267
+ if (bindings.recordSource && (bindings.recordSource === queryName || output.tables_touched.includes(bindings.recordSource))) {
268
+ output.form_bindings.push({
269
+ file: relativePath,
270
+ control: 'Form',
271
+ property: 'RecordSource',
272
+ target: bindings.recordSource
273
+ });
274
+ isFormBound = true;
275
+ }
276
+ for (const rowSrc of bindings.rowSources) {
277
+ if (rowSrc.target === queryName || output.tables_touched.includes(rowSrc.target)) {
278
+ output.form_bindings.push({
279
+ file: relativePath,
280
+ control: rowSrc.control,
281
+ property: 'RowSource',
282
+ target: rowSrc.target
283
+ });
284
+ isFormBound = true;
285
+ }
286
+ }
287
+ if (isFormBound) {
288
+ matchedForms.add(formName);
289
+ if (!output.downstream_impact.forms.includes(formName)) {
290
+ output.downstream_impact.forms.push(formName);
291
+ }
292
+ }
293
+ }
294
+ }
295
+ // 3. Database traversal for event handlers & controls
296
+ for (const caller of output.callers) {
297
+ // Find matching function node containing caller.line in caller.file
298
+ const matchingNodes = db.prepare(`
299
+ SELECT id, name, kind, file_path
300
+ FROM nodes
301
+ WHERE (file_path = ? OR file_path LIKE ?)
302
+ AND start_line <= ?
303
+ AND end_line >= ?
304
+ AND kind IN ('function', 'event', 'sub')
305
+ `).all(caller.file, `%/${path.basename(caller.file)}`, caller.line, caller.line);
306
+ for (const node of matchingNodes) {
307
+ const ancestors = findGraphAncestors(db, node.id);
308
+ for (const ancestorId of ancestors) {
309
+ const ancestorNode = db.prepare('SELECT name, kind, file_path FROM nodes WHERE id = ?').get(ancestorId);
310
+ if (ancestorNode) {
311
+ const fileBase = path.basename(ancestorNode.file_path);
312
+ if (['.bas', '.cls', '.frm'].includes(path.extname(fileBase).toLowerCase())) {
313
+ if (!output.downstream_impact.vba_callers.includes(fileBase)) {
314
+ output.downstream_impact.vba_callers.push(fileBase);
315
+ }
316
+ }
317
+ if (ancestorNode.kind === 'control' || ancestorNode.kind === 'form') {
318
+ const formBase = path.basename(ancestorNode.file_path).split('.')[0] || '';
319
+ if (formBase && !output.downstream_impact.forms.includes(formBase)) {
320
+ output.downstream_impact.forms.push(formBase);
321
+ }
322
+ }
323
+ }
324
+ }
325
+ }
326
+ }
327
+ return output;
328
+ }
329
+ //# sourceMappingURL=sql-impact-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-impact-helpers.js","sourceRoot":"","sources":["../../src/utils/sql-impact-helpers.ts"],"names":[],"mappings":"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"}
@@ -34,12 +34,12 @@ layoutVersion: 5
34
34
  nodeLinker: hoisted
35
35
  packageManager: pnpm@10.16.1
36
36
  pendingBuilds: []
37
- prunedAt: Thu, 02 Jul 2026 11:40:41 GMT
37
+ prunedAt: Sat, 04 Jul 2026 12:02:55 GMT
38
38
  publicHoistPattern: []
39
39
  registries:
40
40
  '@jsr': https://npm.jsr.io/
41
41
  default: https://registry.npmjs.org/
42
42
  skipped: []
43
- storeDir: /home/runner/setup-pnpm/node_modules/.bin/store/v10
43
+ storeDir: /home/runner/.local/share/pnpm/store/v10
44
44
  virtualStoreDir: .pnpm
45
45
  virtualStoreDirMaxLength: 120
@@ -1,5 +1,5 @@
1
1
  {
2
- "lastValidatedTimestamp": 1782992441640,
2
+ "lastValidatedTimestamp": 1783166575757,
3
3
  "projects": {},
4
4
  "pnpmfiles": [],
5
5
  "settings": {
package/lib/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aroman22/codegraph-vba",
3
- "version": "1.3.5",
3
+ "version": "1.5.0",
4
4
  "description": "Supercharge AI coding agents with semantic code intelligence — surgical context, fewer tool calls, faster answers. 100% local.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -48,7 +48,7 @@
48
48
  "@types/node": "^20.19.30",
49
49
  "@types/picomatch": "^4.0.2",
50
50
  "typescript": "^5.0.0",
51
- "vitest": "^2.1.9"
51
+ "vitest": "^3.2.6"
52
52
  },
53
53
  "engines": {
54
54
  "node": ">=22.5.0 <25.0.0"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aroman22/codegraph-vba-darwin-arm64",
3
- "version": "1.3.5",
3
+ "version": "1.5.0",
4
4
  "description": "CodeGraph self-contained bundle for darwin-arm64",
5
5
  "os": [
6
6
  "darwin"