@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.
- package/lib/dist/extraction/index.d.ts.map +1 -1
- package/lib/dist/extraction/index.js +26 -7
- package/lib/dist/extraction/index.js.map +1 -1
- package/lib/dist/extraction/sql-query-extractor.d.ts +11 -3
- package/lib/dist/extraction/sql-query-extractor.d.ts.map +1 -1
- package/lib/dist/extraction/sql-query-extractor.js +19 -5
- package/lib/dist/extraction/sql-query-extractor.js.map +1 -1
- package/lib/dist/extraction/vba-extractor.d.ts +575 -55
- package/lib/dist/extraction/vba-extractor.d.ts.map +1 -1
- package/lib/dist/extraction/vba-extractor.js +1233 -135
- package/lib/dist/extraction/vba-extractor.js.map +1 -1
- package/lib/dist/extraction/vba-form-extractor.d.ts +127 -0
- package/lib/dist/extraction/vba-form-extractor.d.ts.map +1 -1
- package/lib/dist/extraction/vba-form-extractor.js +290 -3
- package/lib/dist/extraction/vba-form-extractor.js.map +1 -1
- package/lib/dist/extraction/vba-preprocess.d.ts +22 -3
- package/lib/dist/extraction/vba-preprocess.d.ts.map +1 -1
- package/lib/dist/extraction/vba-preprocess.js +137 -15
- package/lib/dist/extraction/vba-preprocess.js.map +1 -1
- package/lib/dist/extraction/vba-source.d.ts +58 -0
- package/lib/dist/extraction/vba-source.d.ts.map +1 -0
- package/lib/dist/extraction/vba-source.js +137 -0
- package/lib/dist/extraction/vba-source.js.map +1 -0
- package/lib/dist/types.d.ts +2 -2
- package/lib/dist/types.d.ts.map +1 -1
- package/lib/dist/types.js +6 -0
- package/lib/dist/types.js.map +1 -1
- package/lib/dist/utils/backtrace-helpers.d.ts +35 -0
- package/lib/dist/utils/backtrace-helpers.d.ts.map +1 -0
- package/lib/dist/utils/backtrace-helpers.js +129 -0
- package/lib/dist/utils/backtrace-helpers.js.map +1 -0
- package/lib/dist/utils/sql-impact-helpers.d.ts +38 -0
- package/lib/dist/utils/sql-impact-helpers.d.ts.map +1 -0
- package/lib/dist/utils/sql-impact-helpers.js +329 -0
- package/lib/dist/utils/sql-impact-helpers.js.map +1 -0
- package/lib/node_modules/.modules.yaml +2 -2
- package/lib/node_modules/.pnpm-workspace-state-v1.json +1 -1
- package/lib/package.json +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export declare function isVbaFamilyFile(filePath: string): boolean;
|
|
2
|
+
export interface ReadVbaSourceOptions {
|
|
3
|
+
/**
|
|
4
|
+
* Dependency injection for the byte read — defaults to `fs.readFileSync(path)`.
|
|
5
|
+
* Tests inject in-memory buffers via this parameter so no temp files are
|
|
6
|
+
* needed.
|
|
7
|
+
*/
|
|
8
|
+
readFile?: (filePath: string) => Buffer;
|
|
9
|
+
/**
|
|
10
|
+
* Optional callback invoked when the CP1252 fallback fires. Receives the
|
|
11
|
+
* file path and the underlying decoder error so the CLI can surface a
|
|
12
|
+
* low-severity warning. Extraction continues silently otherwise.
|
|
13
|
+
*/
|
|
14
|
+
onFallback?: (filePath: string, reason: string) => void;
|
|
15
|
+
}
|
|
16
|
+
export interface ReadVbaSourceResult {
|
|
17
|
+
/**
|
|
18
|
+
* Decoded source text with leading UTF-8 BOM stripped. Use this exactly
|
|
19
|
+
* as you would use the result of `fs.readFileSync(path, 'utf-8')`.
|
|
20
|
+
*/
|
|
21
|
+
text: string;
|
|
22
|
+
/**
|
|
23
|
+
* True iff a leading UTF-8 BOM was stripped from the input bytes.
|
|
24
|
+
* Callers that care (e.g. post-processing that compares against a
|
|
25
|
+
* hex-signatured reference) can read this.
|
|
26
|
+
*/
|
|
27
|
+
bomStripped: boolean;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Read a VBA-family source file with encoding-robust decode:
|
|
31
|
+
* 1. Strip leading UTF-8 BOM (bytes EF BB BF) if present.
|
|
32
|
+
* 2. Try UTF-8 with `fatal: true` — a single byte sequence like 0xF3 in
|
|
33
|
+
* the middle of `ActualizarSituación` (CP1252 'ó') throws a `TypeError`
|
|
34
|
+
* and we fall back to `windows-1252`.
|
|
35
|
+
* 3. Return the decoded text.
|
|
36
|
+
*
|
|
37
|
+
* Performance: the BOM peek is 3 byte comparisons; the UTF-8 sniff is `O(fileSize)`
|
|
38
|
+
* but only runs the decoder once on the happy path. CP1252 fallback only
|
|
39
|
+
* fires when UTF-8 actually fails — valid UTF-8 (dysflow, modern editors,
|
|
40
|
+
* anything written today) is byte-identical to `readFileSync(path, 'utf-8')`
|
|
41
|
+
* with the BOM difference only. The windows-1252 decoder is built into
|
|
42
|
+
* Node's WHATWG encodings spec — no extra dep.
|
|
43
|
+
*
|
|
44
|
+
* @param filePath absolute path to read.
|
|
45
|
+
* @param opts optional dependencies; see {@link ReadVbaSourceOptions}.
|
|
46
|
+
*/
|
|
47
|
+
export declare function readVbaSource(filePath: string, opts?: ReadVbaSourceOptions): ReadVbaSourceResult;
|
|
48
|
+
/**
|
|
49
|
+
* String-level BOM strip — survives when the upstream `fsp.readFile(path, 'utf-8')`
|
|
50
|
+
* already decoded the bytes (it's the only way the `\uFEFF` char survives in
|
|
51
|
+
* a string). Used as a defensive last resort when a read site has NOT gone
|
|
52
|
+
* through `readVbaSource` and the source text starts with the BOM marker.
|
|
53
|
+
*
|
|
54
|
+
* Most call sites should prefer `readVbaSource` for fresh reads; this is
|
|
55
|
+
* a string post-process for callers that already have a `string` in hand.
|
|
56
|
+
*/
|
|
57
|
+
export declare function stripUtf8Bom(text: string): string;
|
|
58
|
+
//# sourceMappingURL=vba-source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vba-source.d.ts","sourceRoot":"","sources":["../../src/extraction/vba-source.ts"],"names":[],"mappings":"AA6BA,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEzD;AAUD,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACzD;AAED,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,oBAAyB,GAC9B,mBAAmB,CAgCrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD"}
|
|
@@ -0,0 +1,137 @@
|
|
|
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.isVbaFamilyFile = isVbaFamilyFile;
|
|
37
|
+
exports.readVbaSource = readVbaSource;
|
|
38
|
+
exports.stripUtf8Bom = stripUtf8Bom;
|
|
39
|
+
/**
|
|
40
|
+
* Issue #53: encoding-robust source reading for VBA-family files.
|
|
41
|
+
*
|
|
42
|
+
* Access `SaveAsText` / VBIDE `Export` write Windows-1252 (ANSI). dysflow
|
|
43
|
+
* converts everything to UTF-8-no-BOM on export, but codegraph-vba can be
|
|
44
|
+
* pointed at exports from older dysflow runs, other tools, or hand-copied
|
|
45
|
+
* modules that are still CP1252 on disk. Today every file is read as UTF-8
|
|
46
|
+
* unconditionally; a CP1252 file with accented identifiers (ubiquitous in
|
|
47
|
+
* Spanish-language Access code: `Sub ActualizarSituación`, enum member `Sí`,
|
|
48
|
+
* module headers `' MÓDULO:`) decodes to replacement characters, `\p{L}`
|
|
49
|
+
* regexes stop matching, and the symbol silently disappears from the graph.
|
|
50
|
+
* A BOM-carrying UTF-8 file additionally corrupts the first line (breaks
|
|
51
|
+
* `Attribute VB_Name` detection → wrong module name).
|
|
52
|
+
*
|
|
53
|
+
* Scope (do NOT change decoding for tree-sitter languages): only
|
|
54
|
+
* `.bas`/`.cls`/`.frm`/`.dsr`/`.form.txt`/`.report.txt`/`.sql` files get
|
|
55
|
+
* the BOM strip + CP1252 fallback; everything else stays byte-identical to
|
|
56
|
+
* the existing `fs.readFile(path, 'utf-8')` path.
|
|
57
|
+
*/
|
|
58
|
+
const fs = __importStar(require("fs"));
|
|
59
|
+
/**
|
|
60
|
+
* Family of extensions routed through Dysflow's VBA pipeline (or the
|
|
61
|
+
* SqlQueryExtractor's saved-query parser). The matching is intentionally
|
|
62
|
+
* case-insensitive because file systems vary (NTFS preserves case, ext4
|
|
63
|
+
* on Linux through WSL may not, and Dysflow itself is rename-tolerant).
|
|
64
|
+
*/
|
|
65
|
+
const VBA_FAMILY_RE = /\.(?:bas|cls|frm|dsr|form\.txt|report\.txt|sql)$/i;
|
|
66
|
+
function isVbaFamilyFile(filePath) {
|
|
67
|
+
return VBA_FAMILY_RE.test(filePath);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* UTF-8 BOM bytes (EF BB BF) — the WHATWG UTF-8 decoder consumes these
|
|
71
|
+
* silently (no U+FEFF written), but `readFileSync(path, 'utf-8')` on
|
|
72
|
+
* Node does NOT strip the BOM and emits `\uFEFF` as the first character,
|
|
73
|
+
* which breaks `Attribute VB_Name` matching.
|
|
74
|
+
*/
|
|
75
|
+
const UTF8_BOM = [0xef, 0xbb, 0xbf];
|
|
76
|
+
/**
|
|
77
|
+
* Read a VBA-family source file with encoding-robust decode:
|
|
78
|
+
* 1. Strip leading UTF-8 BOM (bytes EF BB BF) if present.
|
|
79
|
+
* 2. Try UTF-8 with `fatal: true` — a single byte sequence like 0xF3 in
|
|
80
|
+
* the middle of `ActualizarSituación` (CP1252 'ó') throws a `TypeError`
|
|
81
|
+
* and we fall back to `windows-1252`.
|
|
82
|
+
* 3. Return the decoded text.
|
|
83
|
+
*
|
|
84
|
+
* Performance: the BOM peek is 3 byte comparisons; the UTF-8 sniff is `O(fileSize)`
|
|
85
|
+
* but only runs the decoder once on the happy path. CP1252 fallback only
|
|
86
|
+
* fires when UTF-8 actually fails — valid UTF-8 (dysflow, modern editors,
|
|
87
|
+
* anything written today) is byte-identical to `readFileSync(path, 'utf-8')`
|
|
88
|
+
* with the BOM difference only. The windows-1252 decoder is built into
|
|
89
|
+
* Node's WHATWG encodings spec — no extra dep.
|
|
90
|
+
*
|
|
91
|
+
* @param filePath absolute path to read.
|
|
92
|
+
* @param opts optional dependencies; see {@link ReadVbaSourceOptions}.
|
|
93
|
+
*/
|
|
94
|
+
function readVbaSource(filePath, opts = {}) {
|
|
95
|
+
const readFile = opts.readFile ?? ((p) => fs.readFileSync(p));
|
|
96
|
+
const onFallback = opts.onFallback;
|
|
97
|
+
const buf = readFile(filePath);
|
|
98
|
+
// BOM strip: only at start, byte-exact. Encoding BOMs in the middle of a
|
|
99
|
+
// file are not stripped (they'd be data, not marker).
|
|
100
|
+
const bomStripped = buf.length >= 3 &&
|
|
101
|
+
buf[0] === UTF8_BOM[0] &&
|
|
102
|
+
buf[1] === UTF8_BOM[1] &&
|
|
103
|
+
buf[2] === UTF8_BOM[2];
|
|
104
|
+
const body = bomStripped ? buf.subarray(3) : buf;
|
|
105
|
+
// Cheap UTF-8 sniff with the fatal flag — throws on invalid sequences.
|
|
106
|
+
// Node's WHATWG TextDecoder supports this and gives us a deterministic
|
|
107
|
+
// signal instead of silent replacement-char substitution.
|
|
108
|
+
try {
|
|
109
|
+
const text = new TextDecoder('utf-8', { fatal: true }).decode(body);
|
|
110
|
+
return { text, bomStripped };
|
|
111
|
+
}
|
|
112
|
+
catch (err) {
|
|
113
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
114
|
+
// CP1252 covers the full Latin-1 range used by Access exports:
|
|
115
|
+
// Spanish ('áéíóúñ¿¡'), French ('éèàç'), German ('äöüß'), Italian
|
|
116
|
+
// ('àèéìòù'), Portuguese ('ãõç'), etc. — and isLosslessRecovery from
|
|
117
|
+
// `new TextDecoder('windows-1252').decode(bytes)` for these byte
|
|
118
|
+
// values, so this fallback turns every byte-for-byte CP1252 source into
|
|
119
|
+
// a valid JavaScript string the extractor can regex.
|
|
120
|
+
const text = new TextDecoder('windows-1252').decode(body);
|
|
121
|
+
onFallback?.(filePath, reason);
|
|
122
|
+
return { text, bomStripped };
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* String-level BOM strip — survives when the upstream `fsp.readFile(path, 'utf-8')`
|
|
127
|
+
* already decoded the bytes (it's the only way the `\uFEFF` char survives in
|
|
128
|
+
* a string). Used as a defensive last resort when a read site has NOT gone
|
|
129
|
+
* through `readVbaSource` and the source text starts with the BOM marker.
|
|
130
|
+
*
|
|
131
|
+
* Most call sites should prefer `readVbaSource` for fresh reads; this is
|
|
132
|
+
* a string post-process for callers that already have a `string` in hand.
|
|
133
|
+
*/
|
|
134
|
+
function stripUtf8Bom(text) {
|
|
135
|
+
return text.charCodeAt(0) === 0xfeff ? text.slice(1) : text;
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=vba-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vba-source.js","sourceRoot":"","sources":["../../src/extraction/vba-source.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,0CAEC;AAyDD,sCAmCC;AAWD,oCAEC;AAxID;;;;;;;;;;;;;;;;;;GAkBG;AACH,uCAAyB;AAEzB;;;;;GAKG;AACH,MAAM,aAAa,GAAG,mDAAmD,CAAC;AAE1E,SAAgB,eAAe,CAAC,QAAgB;IAC9C,OAAO,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED;;;;;GAKG;AACH,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAC;AA+B7C;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAgB,aAAa,CAC3B,QAAgB,EAChB,OAA6B,EAAE;IAE/B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IACnC,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAE/B,yEAAyE;IACzE,sDAAsD;IACtD,MAAM,WAAW,GACf,GAAG,CAAC,MAAM,IAAI,CAAC;QACf,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC;QACtB,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC;QACtB,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAEjD,uEAAuE;IACvE,uEAAuE;IACvE,0DAA0D;IAC1D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAC/B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChE,+DAA+D;QAC/D,kEAAkE;QAClE,qEAAqE;QACrE,iEAAiE;QACjE,wEAAwE;QACxE,qDAAqD;QACrD,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1D,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC/B,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAC/B,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,YAAY,CAAC,IAAY;IACvC,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9D,CAAC"}
|
package/lib/dist/types.d.ts
CHANGED
|
@@ -10,12 +10,12 @@
|
|
|
10
10
|
* of truth backs both the TS type and any runtime validation
|
|
11
11
|
* (e.g. the search query parser).
|
|
12
12
|
*/
|
|
13
|
-
export declare const NODE_KINDS: readonly ["file", "module", "class", "struct", "interface", "trait", "protocol", "function", "method", "property", "field", "variable", "constant", "enum", "enum_member", "event", "type", "type_member", "declare", "type_alias", "namespace", "parameter", "import", "export", "route", "component", "query", "form-layout", "form-instance-control"];
|
|
13
|
+
export declare const NODE_KINDS: readonly ["file", "module", "class", "struct", "interface", "trait", "protocol", "function", "method", "property", "field", "variable", "constant", "enum", "enum_member", "event", "type", "type_member", "declare", "type_alias", "namespace", "parameter", "import", "export", "route", "component", "query", "form-layout", "form-instance-control", "report-layout"];
|
|
14
14
|
export type NodeKind = (typeof NODE_KINDS)[number];
|
|
15
15
|
/**
|
|
16
16
|
* Types of edges (relationships) between nodes
|
|
17
17
|
*/
|
|
18
|
-
export type EdgeKind = 'contains' | 'calls' | 'imports' | 'exports' | 'extends' | 'implements' | 'references' | 'type_of' | 'returns' | 'instantiates' | 'overrides' | 'decorates' | 'event-handler' | 'opens-form' | 'raises-event' | 'subscribes-event' | 'type-member';
|
|
18
|
+
export type EdgeKind = 'contains' | 'calls' | 'imports' | 'exports' | 'extends' | 'implements' | 'references' | 'type_of' | 'returns' | 'instantiates' | 'overrides' | 'decorates' | 'event-handler' | 'opens-form' | 'opens-report' | 'raises-event' | 'subscribes-event' | 'type-member';
|
|
19
19
|
/**
|
|
20
20
|
* Supported programming languages. See NODE_KINDS for why this is a
|
|
21
21
|
* runtime-iterable const array.
|
package/lib/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/lib/dist/types.js
CHANGED
|
@@ -55,8 +55,14 @@ exports.NODE_KINDS = [
|
|
|
55
55
|
// CommandButton, etc.) and is the bridge target for `event-handler`
|
|
56
56
|
// edges synthesized from `<Control>_<Event>` handler Subs in the
|
|
57
57
|
// sibling `.cls`.
|
|
58
|
+
// 'report-layout' — Issue #48: the report-level stub node synthesized
|
|
59
|
+
// for `DoCmd.OpenReport "<Name>"`. Mirrors `form-layout` but is keyed
|
|
60
|
+
// to the report naming convention (`Report_<Name>` qualifiedName).
|
|
61
|
+
// Distinct kind so downstream tooling can filter form-vs-report stubs
|
|
62
|
+
// without inspecting qualifiedName.
|
|
58
63
|
'form-layout',
|
|
59
64
|
'form-instance-control',
|
|
65
|
+
'report-layout',
|
|
60
66
|
];
|
|
61
67
|
/**
|
|
62
68
|
* Supported programming languages. See NODE_KINDS for why this is a
|
package/lib/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF;;;;;;GAMG;AACU,QAAA,UAAU,GAAG;IACxB,MAAM;IACN,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,WAAW;IACX,OAAO;IACP,UAAU;IACV,UAAU;IACV,QAAQ;IACR,UAAU;IACV,OAAO;IACP,UAAU;IACV,UAAU;IACV,MAAM;IACN,aAAa;IACb,OAAO;IACP,MAAM;IACN,aAAa;IACb,SAAS;IACT,YAAY;IACZ,WAAW;IACX,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,WAAW;IACX,yEAAyE;IACzE,2EAA2E;IAC3E,OAAO;IACP,iEAAiE;IACjE,+DAA+D;IAC/D,kEAAkE;IAClE,sEAAsE;IACtE,wEAAwE;IACxE,sEAAsE;IACtE,oEAAoE;IACpE,iEAAiE;IACjE,kBAAkB;IAClB,aAAa;IACb,uBAAuB;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF;;;;;;GAMG;AACU,QAAA,UAAU,GAAG;IACxB,MAAM;IACN,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,WAAW;IACX,OAAO;IACP,UAAU;IACV,UAAU;IACV,QAAQ;IACR,UAAU;IACV,OAAO;IACP,UAAU;IACV,UAAU;IACV,MAAM;IACN,aAAa;IACb,OAAO;IACP,MAAM;IACN,aAAa;IACb,SAAS;IACT,YAAY;IACZ,WAAW;IACX,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,WAAW;IACX,yEAAyE;IACzE,2EAA2E;IAC3E,OAAO;IACP,iEAAiE;IACjE,+DAA+D;IAC/D,kEAAkE;IAClE,sEAAsE;IACtE,wEAAwE;IACxE,sEAAsE;IACtE,oEAAoE;IACpE,iEAAiE;IACjE,kBAAkB;IAClB,sEAAsE;IACtE,sEAAsE;IACtE,mEAAmE;IACnE,sEAAsE;IACtE,oCAAoC;IACpC,aAAa;IACb,uBAAuB;IACvB,eAAe;CACP,CAAC;AAyCX;;;GAGG;AACU,QAAA,SAAS,GAAG;IACvB,YAAY;IACZ,YAAY;IACZ,KAAK;IACL,KAAK;IACL,QAAQ;IACR,IAAI;IACJ,MAAM;IACN,MAAM;IACN,GAAG;IACH,KAAK;IACL,QAAQ;IACR,OAAO;IACP,KAAK;IACL,MAAM;IACN,OAAO;IACP,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,KAAK;IACL,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,KAAK;IACL,MAAM;IACN,MAAM;IACN,GAAG;IACH,KAAK;IACL,6EAA6E;IAC7E,8EAA8E;IAC9E,4EAA4E;IAC5E,wEAAwE;IACxE,KAAK;IACL,MAAM;IACN,MAAM;IACN,KAAK;IACL,YAAY;IACZ,SAAS;CACD,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { SqliteDatabase } from '../db';
|
|
2
|
+
/**
|
|
3
|
+
* VBA Handler Backtrace Helper Functions
|
|
4
|
+
*/
|
|
5
|
+
export interface VariableInfo {
|
|
6
|
+
name: string;
|
|
7
|
+
type: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Parses parameters from a VBA subroutine/function signature,
|
|
11
|
+
* extracting parameters of custom types (filtering out primitive types).
|
|
12
|
+
*/
|
|
13
|
+
export declare function parseSignatureParams(signature: string): VariableInfo[];
|
|
14
|
+
/**
|
|
15
|
+
* Reconstructs a multiline SQL query string concatenated using VBA line continuation
|
|
16
|
+
* and string concatenation operators. Accumulates up to a limit of 200 characters.
|
|
17
|
+
*/
|
|
18
|
+
export declare function reconstructSQL(lines: string[]): string;
|
|
19
|
+
export interface TraversalNode {
|
|
20
|
+
id: string;
|
|
21
|
+
name: string;
|
|
22
|
+
kind: string;
|
|
23
|
+
children: TraversalNode[];
|
|
24
|
+
}
|
|
25
|
+
export interface TraversalResult {
|
|
26
|
+
tree: TraversalNode | null;
|
|
27
|
+
cycle_detected: boolean;
|
|
28
|
+
warnings: string[];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Traverses VBA call/relationship graphs starting from a specific node ID,
|
|
32
|
+
* tracking cycles and capping search depth.
|
|
33
|
+
*/
|
|
34
|
+
export declare function traverseGraph(db: SqliteDatabase, startNodeId: string, maxDepth?: number): TraversalResult;
|
|
35
|
+
//# sourceMappingURL=backtrace-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backtrace-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/backtrace-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEvC;;GAEG;AAEH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE,CAqBtE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CA2BtD;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,EAAE,EAAE,cAAc,EAClB,WAAW,EAAE,MAAM,EACnB,QAAQ,SAAK,GACZ,eAAe,CA4EjB"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseSignatureParams = parseSignatureParams;
|
|
4
|
+
exports.reconstructSQL = reconstructSQL;
|
|
5
|
+
exports.traverseGraph = traverseGraph;
|
|
6
|
+
/**
|
|
7
|
+
* Parses parameters from a VBA subroutine/function signature,
|
|
8
|
+
* extracting parameters of custom types (filtering out primitive types).
|
|
9
|
+
*/
|
|
10
|
+
function parseSignatureParams(signature) {
|
|
11
|
+
const primitiveTypes = new Set([
|
|
12
|
+
'long', 'integer', 'string', 'boolean', 'double', 'single',
|
|
13
|
+
'byte', 'currency', 'date', 'variant', 'object',
|
|
14
|
+
'longlong', 'longptr', 'decimal'
|
|
15
|
+
]);
|
|
16
|
+
const regex = /(?:ByVal|ByRef)?\s*(\w+)\s+As\s+(\w+)/gi;
|
|
17
|
+
const result = [];
|
|
18
|
+
const matches = signature.matchAll(regex);
|
|
19
|
+
for (const m of matches) {
|
|
20
|
+
const name = m[1];
|
|
21
|
+
const type = m[2];
|
|
22
|
+
if (name !== undefined && type !== undefined) {
|
|
23
|
+
if (!primitiveTypes.has(type.toLowerCase())) {
|
|
24
|
+
result.push({ name, type });
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return result;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Reconstructs a multiline SQL query string concatenated using VBA line continuation
|
|
32
|
+
* and string concatenation operators. Accumulates up to a limit of 200 characters.
|
|
33
|
+
*/
|
|
34
|
+
function reconstructSQL(lines) {
|
|
35
|
+
let accumulated = "";
|
|
36
|
+
const stringRegex = /"((?:[^"\\]|\\.)*)"/g;
|
|
37
|
+
for (const line of lines) {
|
|
38
|
+
let match;
|
|
39
|
+
stringRegex.lastIndex = 0;
|
|
40
|
+
while ((match = stringRegex.exec(line)) !== null) {
|
|
41
|
+
let content = match[1];
|
|
42
|
+
if (content !== undefined) {
|
|
43
|
+
content = content.replace(/\\'/g, "'").replace(/\\"/g, '"').replace(/\\\\/g, '\\');
|
|
44
|
+
accumulated += content;
|
|
45
|
+
if (accumulated.length >= 200) {
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (accumulated.length >= 200) {
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (accumulated.length > 200) {
|
|
55
|
+
accumulated = accumulated.slice(0, 200);
|
|
56
|
+
}
|
|
57
|
+
return accumulated;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Traverses VBA call/relationship graphs starting from a specific node ID,
|
|
61
|
+
* tracking cycles and capping search depth.
|
|
62
|
+
*/
|
|
63
|
+
function traverseGraph(db, startNodeId, maxDepth = 10) {
|
|
64
|
+
if (!db) {
|
|
65
|
+
return {
|
|
66
|
+
tree: null,
|
|
67
|
+
cycle_detected: false,
|
|
68
|
+
warnings: ['DATABASE_NOT_PROVIDED']
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
const warnings = [];
|
|
72
|
+
let cycleDetected = false;
|
|
73
|
+
try {
|
|
74
|
+
// Optimization: Prepare statements once to avoid parsing cost inside the recursion
|
|
75
|
+
const stmtNode = db.prepare('SELECT name, kind FROM nodes WHERE id = ?');
|
|
76
|
+
const stmtEdges = db.prepare('SELECT target FROM edges WHERE source = ?');
|
|
77
|
+
function helper(nodeId, depth, visited) {
|
|
78
|
+
const nodeRow = stmtNode.get(nodeId);
|
|
79
|
+
if (!nodeRow) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
const node = {
|
|
83
|
+
id: nodeId,
|
|
84
|
+
name: nodeRow.name,
|
|
85
|
+
kind: nodeRow.kind,
|
|
86
|
+
children: []
|
|
87
|
+
};
|
|
88
|
+
// Cycle detection
|
|
89
|
+
if (visited.has(nodeId)) {
|
|
90
|
+
cycleDetected = true;
|
|
91
|
+
return node;
|
|
92
|
+
}
|
|
93
|
+
// Depth capping
|
|
94
|
+
if (depth >= maxDepth) {
|
|
95
|
+
if (!warnings.includes('MAX_DEPTH_EXCEEDED')) {
|
|
96
|
+
warnings.push('MAX_DEPTH_EXCEEDED');
|
|
97
|
+
}
|
|
98
|
+
return node;
|
|
99
|
+
}
|
|
100
|
+
// Fetch outgoing target nodes
|
|
101
|
+
const edges = stmtEdges.all(nodeId);
|
|
102
|
+
// Traverse children with updated path history
|
|
103
|
+
const newVisited = new Set(visited);
|
|
104
|
+
newVisited.add(nodeId);
|
|
105
|
+
for (const edge of edges) {
|
|
106
|
+
const child = helper(edge.target, depth + 1, newVisited);
|
|
107
|
+
if (child) {
|
|
108
|
+
node.children.push(child);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return node;
|
|
112
|
+
}
|
|
113
|
+
const tree = helper(startNodeId, 0, new Set());
|
|
114
|
+
return {
|
|
115
|
+
tree,
|
|
116
|
+
cycle_detected: cycleDetected,
|
|
117
|
+
warnings
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
122
|
+
return {
|
|
123
|
+
tree: null,
|
|
124
|
+
cycle_detected: false,
|
|
125
|
+
warnings: [`TRAVERSAL_ERROR: ${errorMsg}`]
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=backtrace-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backtrace-helpers.js","sourceRoot":"","sources":["../../src/utils/backtrace-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interface representing the extracted bindings of a VBA form or report layout.
|
|
3
|
+
*/
|
|
4
|
+
export interface FormBindings {
|
|
5
|
+
recordSource?: string;
|
|
6
|
+
rowSources: Array<{
|
|
7
|
+
control: string;
|
|
8
|
+
target: string;
|
|
9
|
+
}>;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Interface representing the SQL lineage analysis result.
|
|
13
|
+
*/
|
|
14
|
+
export interface SqlLineage {
|
|
15
|
+
tables: string[];
|
|
16
|
+
lineage: Array<{
|
|
17
|
+
source: string;
|
|
18
|
+
resolved: string;
|
|
19
|
+
}>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Traces references to the target query name inside a VBA module's content.
|
|
23
|
+
* Returns 1-based line numbers where references are found.
|
|
24
|
+
*/
|
|
25
|
+
export declare function traceVbaCallers(content: string, queryName: string): number[];
|
|
26
|
+
/**
|
|
27
|
+
* Parses a VBA form definition (.form.txt/.report.txt) and extracts RecordSource and RowSource bindings.
|
|
28
|
+
*/
|
|
29
|
+
export declare function extractFormBindings(content: string): FormBindings;
|
|
30
|
+
/**
|
|
31
|
+
* Resolves table and column aliases from a SQL string to build a column-level lineage.
|
|
32
|
+
*/
|
|
33
|
+
export declare function resolveSqlLineage(sql: string): SqlLineage;
|
|
34
|
+
/**
|
|
35
|
+
* Runs a combined database and file-level downstream impact analysis.
|
|
36
|
+
*/
|
|
37
|
+
export declare function runImpactAnalysis(db: any, workspaceDir: string, queryName: string): any;
|
|
38
|
+
//# sourceMappingURL=sql-impact-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-impact-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/sql-impact-helpers.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxD;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAoB5E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAiEjE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAqDzD;AA6CD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,GAAG,EACP,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAChB,GAAG,CAgIL"}
|