@vyuhlabs/dxkit 2.18.1 → 2.20.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/CHANGELOG.md +55 -0
- package/dist/analyzers/flow/csv.d.ts +17 -0
- package/dist/analyzers/flow/csv.d.ts.map +1 -0
- package/dist/analyzers/flow/csv.js +64 -0
- package/dist/analyzers/flow/csv.js.map +1 -0
- package/dist/analyzers/flow/extract.d.ts +64 -0
- package/dist/analyzers/flow/extract.d.ts.map +1 -0
- package/dist/analyzers/flow/extract.js +254 -0
- package/dist/analyzers/flow/extract.js.map +1 -0
- package/dist/analyzers/flow/gather.d.ts +24 -0
- package/dist/analyzers/flow/gather.d.ts.map +1 -0
- package/dist/analyzers/flow/gather.js +50 -0
- package/dist/analyzers/flow/gather.js.map +1 -0
- package/dist/analyzers/flow/model.d.ts +63 -0
- package/dist/analyzers/flow/model.d.ts.map +1 -0
- package/dist/analyzers/flow/model.js +78 -0
- package/dist/analyzers/flow/model.js.map +1 -0
- package/dist/analyzers/flow/normalize.d.ts +76 -0
- package/dist/analyzers/flow/normalize.d.ts.map +1 -0
- package/dist/analyzers/flow/normalize.js +133 -0
- package/dist/analyzers/flow/normalize.js.map +1 -0
- package/dist/analyzers/flow/spec-source.d.ts +44 -0
- package/dist/analyzers/flow/spec-source.d.ts.map +1 -0
- package/dist/analyzers/flow/spec-source.js +75 -0
- package/dist/analyzers/flow/spec-source.js.map +1 -0
- package/dist/ast/parse.d.ts +71 -0
- package/dist/ast/parse.d.ts.map +1 -0
- package/dist/ast/parse.js +220 -0
- package/dist/ast/parse.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +46 -0
- package/dist/cli.js.map +1 -1
- package/dist/dashboard/graph-adapter.d.ts.map +1 -1
- package/dist/dashboard/graph-adapter.js +1 -4
- package/dist/dashboard/graph-adapter.js.map +1 -1
- package/dist/explore/flow-graph.d.ts +62 -0
- package/dist/explore/flow-graph.d.ts.map +1 -0
- package/dist/explore/flow-graph.js +202 -0
- package/dist/explore/flow-graph.js.map +1 -0
- package/dist/explore/flow-view.d.ts +33 -0
- package/dist/explore/flow-view.d.ts.map +1 -0
- package/dist/explore/flow-view.js +85 -0
- package/dist/explore/flow-view.js.map +1 -0
- package/dist/explore/load.d.ts.map +1 -1
- package/dist/explore/load.js +16 -3
- package/dist/explore/load.js.map +1 -1
- package/dist/explore/queries.d.ts +92 -1
- package/dist/explore/queries.d.ts.map +1 -1
- package/dist/explore/queries.js +142 -0
- package/dist/explore/queries.js.map +1 -1
- package/dist/explore/types.d.ts +56 -3
- package/dist/explore/types.d.ts.map +1 -1
- package/dist/explore/types.js +10 -2
- package/dist/explore/types.js.map +1 -1
- package/dist/flow-cli.d.ts +38 -0
- package/dist/flow-cli.d.ts.map +1 -0
- package/dist/flow-cli.js +200 -0
- package/dist/flow-cli.js.map +1 -0
- package/dist/languages/index.d.ts +15 -2
- package/dist/languages/index.d.ts.map +1 -1
- package/dist/languages/index.js +18 -0
- package/dist/languages/index.js.map +1 -1
- package/dist/languages/types.d.ts +106 -0
- package/dist/languages/types.d.ts.map +1 -1
- package/dist/languages/typescript.d.ts.map +1 -1
- package/dist/languages/typescript.js +32 -0
- package/dist/languages/typescript.js.map +1 -1
- package/package.json +4 -2
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Canonical AST access — dxkit's in-process, graphify-independent parser.
|
|
4
|
+
*
|
|
5
|
+
* This is the ONE module that touches a tree-sitter engine. Every AST-based
|
|
6
|
+
* feature (flow extraction today; a future graph builder that could replace
|
|
7
|
+
* graphify; any later AST analysis) parses through here, so the engine stays
|
|
8
|
+
* swappable in a single file — the same adapter discipline graphify sits
|
|
9
|
+
* behind, but for raw parsing.
|
|
10
|
+
*
|
|
11
|
+
* Why its own layer (vs graphify): graphify is a high-level *graph builder*
|
|
12
|
+
* (functions/calls/communities) that does not expose raw call/decorator/
|
|
13
|
+
* string-literal nodes, and it runs as an optional Python subprocess. This
|
|
14
|
+
* layer is the low-level *parser*: source → concrete syntax tree, in-process
|
|
15
|
+
* (web-tree-sitter wasm), no Python, no graphify. It is also the foundation a
|
|
16
|
+
* future in-house graph builder would consume to migrate the code graph off
|
|
17
|
+
* graphify.
|
|
18
|
+
*
|
|
19
|
+
* Design:
|
|
20
|
+
* - **Lazy + graceful.** The wasm engine loads on first use (keeps startup
|
|
21
|
+
* fast) and every entry point returns `null` rather than throwing when the
|
|
22
|
+
* engine or a grammar is unavailable — AST features degrade, they don't
|
|
23
|
+
* crash (mirrors graphify's "unavailable" contract).
|
|
24
|
+
* - **Pack-driven grammars (Rule 6).** A file's grammar is resolved from the
|
|
25
|
+
* owning pack's `treeSitterGrammars[ext]`; this module never hardcodes a
|
|
26
|
+
* per-language mapping. Logical grammar names map to wasm artifacts here,
|
|
27
|
+
* so the artifact source (currently `tree-sitter-wasms`, pinned) is
|
|
28
|
+
* swappable / vendorable without touching packs.
|
|
29
|
+
* - **Cached.** Parser.init runs once; each grammar's `Language` and a bound
|
|
30
|
+
* `Parser` are cached for the process.
|
|
31
|
+
*/
|
|
32
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
33
|
+
if (k2 === undefined) k2 = k;
|
|
34
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
35
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
36
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
37
|
+
}
|
|
38
|
+
Object.defineProperty(o, k2, desc);
|
|
39
|
+
}) : (function(o, m, k, k2) {
|
|
40
|
+
if (k2 === undefined) k2 = k;
|
|
41
|
+
o[k2] = m[k];
|
|
42
|
+
}));
|
|
43
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
44
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
45
|
+
}) : function(o, v) {
|
|
46
|
+
o["default"] = v;
|
|
47
|
+
});
|
|
48
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
49
|
+
var ownKeys = function(o) {
|
|
50
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
51
|
+
var ar = [];
|
|
52
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
53
|
+
return ar;
|
|
54
|
+
};
|
|
55
|
+
return ownKeys(o);
|
|
56
|
+
};
|
|
57
|
+
return function (mod) {
|
|
58
|
+
if (mod && mod.__esModule) return mod;
|
|
59
|
+
var result = {};
|
|
60
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
61
|
+
__setModuleDefault(result, mod);
|
|
62
|
+
return result;
|
|
63
|
+
};
|
|
64
|
+
})();
|
|
65
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
66
|
+
exports.astEngineAvailable = astEngineAvailable;
|
|
67
|
+
exports.parseSource = parseSource;
|
|
68
|
+
exports.grammarForExtension = grammarForExtension;
|
|
69
|
+
exports.parseFile = parseFile;
|
|
70
|
+
exports.walk = walk;
|
|
71
|
+
exports.resetAstCachesForTest = resetAstCachesForTest;
|
|
72
|
+
const fs_1 = require("fs");
|
|
73
|
+
const path_1 = require("path");
|
|
74
|
+
const languages_1 = require("../languages");
|
|
75
|
+
let enginePromise = null;
|
|
76
|
+
const languageCache = new Map();
|
|
77
|
+
const parserCache = new Map();
|
|
78
|
+
let warnedUnavailable = false;
|
|
79
|
+
/**
|
|
80
|
+
* Resolve a dependency's installed directory via its package.json (works
|
|
81
|
+
* around packages whose `main`/`exports` block direct resolution — e.g.
|
|
82
|
+
* `tree-sitter-wasms`' broken `main`, and `web-tree-sitter`' exports-gated
|
|
83
|
+
* package.json: resolve the runtime entry for that one).
|
|
84
|
+
*/
|
|
85
|
+
function runtimeWasmPath() {
|
|
86
|
+
return (0, path_1.join)((0, path_1.dirname)(require.resolve('web-tree-sitter')), 'tree-sitter.wasm');
|
|
87
|
+
}
|
|
88
|
+
function grammarWasmPath(grammar) {
|
|
89
|
+
const wasmsDir = (0, path_1.dirname)(require.resolve('tree-sitter-wasms/package.json'));
|
|
90
|
+
return (0, path_1.join)(wasmsDir, 'out', `tree-sitter-${grammar}.wasm`);
|
|
91
|
+
}
|
|
92
|
+
/** Lazily load + init the wasm engine. Returns null (once-warned) on failure. */
|
|
93
|
+
async function getEngine() {
|
|
94
|
+
if (enginePromise)
|
|
95
|
+
return enginePromise;
|
|
96
|
+
enginePromise = (async () => {
|
|
97
|
+
try {
|
|
98
|
+
// Dynamic import keeps the engine out of the startup path; web-tree-sitter
|
|
99
|
+
// is require-compatible so this resolves cleanly under CommonJS output.
|
|
100
|
+
const mod = await Promise.resolve().then(() => __importStar(require('web-tree-sitter')));
|
|
101
|
+
const runtime = runtimeWasmPath();
|
|
102
|
+
await mod.Parser.init({ locateFile: () => runtime });
|
|
103
|
+
return { ParserCtor: mod.Parser, LanguageCtor: mod.Language };
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
if (!warnedUnavailable) {
|
|
107
|
+
warnedUnavailable = true;
|
|
108
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
109
|
+
process.stderr.write(`[dxkit] AST engine unavailable, skipping AST features: ${reason}\n`);
|
|
110
|
+
}
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
})();
|
|
114
|
+
return enginePromise;
|
|
115
|
+
}
|
|
116
|
+
async function getLanguage(engine, grammar) {
|
|
117
|
+
if (languageCache.has(grammar))
|
|
118
|
+
return languageCache.get(grammar) ?? null;
|
|
119
|
+
let lang = null;
|
|
120
|
+
try {
|
|
121
|
+
lang = await engine.LanguageCtor.load(grammarWasmPath(grammar));
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
lang = null; // grammar artifact missing/unreadable → that language degrades
|
|
125
|
+
}
|
|
126
|
+
languageCache.set(grammar, lang);
|
|
127
|
+
return lang;
|
|
128
|
+
}
|
|
129
|
+
async function getParser(engine, grammar) {
|
|
130
|
+
const cached = parserCache.get(grammar);
|
|
131
|
+
if (cached)
|
|
132
|
+
return cached;
|
|
133
|
+
const lang = await getLanguage(engine, grammar);
|
|
134
|
+
if (!lang)
|
|
135
|
+
return null;
|
|
136
|
+
const parser = new engine.ParserCtor();
|
|
137
|
+
parser.setLanguage(lang);
|
|
138
|
+
parserCache.set(grammar, parser);
|
|
139
|
+
return parser;
|
|
140
|
+
}
|
|
141
|
+
// ── Public API ──────────────────────────────────────────────────────────────
|
|
142
|
+
/** Whether the AST engine can be loaded in this environment (for doctor checks). */
|
|
143
|
+
async function astEngineAvailable() {
|
|
144
|
+
return (await getEngine()) !== null;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Parse source text with a named grammar. Returns the tree, or `null` if the
|
|
148
|
+
* engine or grammar is unavailable (never throws).
|
|
149
|
+
*/
|
|
150
|
+
async function parseSource(source, grammar) {
|
|
151
|
+
const engine = await getEngine();
|
|
152
|
+
if (!engine)
|
|
153
|
+
return null;
|
|
154
|
+
const parser = await getParser(engine, grammar);
|
|
155
|
+
if (!parser)
|
|
156
|
+
return null;
|
|
157
|
+
try {
|
|
158
|
+
return parser.parse(source);
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* The grammar + owning language for a file extension (with leading dot),
|
|
166
|
+
* resolved from the active pack registry — or `null` if no pack parses it.
|
|
167
|
+
*/
|
|
168
|
+
function grammarForExtension(ext) {
|
|
169
|
+
const lower = ext.toLowerCase();
|
|
170
|
+
for (const pack of languages_1.LANGUAGES) {
|
|
171
|
+
const grammar = pack.treeSitterGrammars?.[lower];
|
|
172
|
+
if (grammar)
|
|
173
|
+
return { grammar, languageId: pack.id };
|
|
174
|
+
}
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Read + parse a file, resolving its grammar from the extension via the pack
|
|
179
|
+
* registry. Returns `null` if the extension maps to no grammar, the file is
|
|
180
|
+
* unreadable, or the engine is unavailable.
|
|
181
|
+
*/
|
|
182
|
+
async function parseFile(filePath) {
|
|
183
|
+
const resolved = grammarForExtension((0, path_1.extname)(filePath));
|
|
184
|
+
if (!resolved)
|
|
185
|
+
return null;
|
|
186
|
+
let source;
|
|
187
|
+
try {
|
|
188
|
+
source = (0, fs_1.readFileSync)(filePath, 'utf8');
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
return null;
|
|
192
|
+
}
|
|
193
|
+
const tree = await parseSource(source, resolved.grammar);
|
|
194
|
+
if (!tree)
|
|
195
|
+
return null;
|
|
196
|
+
return { tree, source, grammar: resolved.grammar, languageId: resolved.languageId };
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Depth-first walk of a node and its descendants. The visitor runs on each
|
|
200
|
+
* node; return `false` to skip a node's children. Consumers use this rather
|
|
201
|
+
* than walking `node.children` directly so a future engine swap stays
|
|
202
|
+
* contained in this module.
|
|
203
|
+
*/
|
|
204
|
+
function walk(node, visit) {
|
|
205
|
+
const proceed = visit(node);
|
|
206
|
+
if (proceed === false)
|
|
207
|
+
return;
|
|
208
|
+
for (const child of node.children) {
|
|
209
|
+
if (child)
|
|
210
|
+
walk(child, visit);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
/** Test seam: drop cached engine/grammars/parsers so a test can re-init. */
|
|
214
|
+
function resetAstCachesForTest() {
|
|
215
|
+
enginePromise = null;
|
|
216
|
+
languageCache.clear();
|
|
217
|
+
parserCache.clear();
|
|
218
|
+
warnedUnavailable = false;
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/ast/parse.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+FH,gDAEC;AAMD,kCAUC;AAMD,kDASC;AAOD,8BAYC;AAQD,oBAMC;AAGD,sDAKC;AAvKD,2BAAkC;AAClC,+BAA8C;AAE9C,4CAAyC;AAsBzC,IAAI,aAAa,GAAkC,IAAI,CAAC;AACxD,MAAM,aAAa,GAAG,IAAI,GAAG,EAA2B,CAAC;AACzD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;AAC9C,IAAI,iBAAiB,GAAG,KAAK,CAAC;AAE9B;;;;;GAKG;AACH,SAAS,eAAe;IACtB,OAAO,IAAA,WAAI,EAAC,IAAA,cAAO,EAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;AAC/E,CAAC;AACD,SAAS,eAAe,CAAC,OAAe;IACtC,MAAM,QAAQ,GAAG,IAAA,cAAO,EAAC,OAAO,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC,CAAC;IAC5E,OAAO,IAAA,WAAI,EAAC,QAAQ,EAAE,KAAK,EAAE,eAAe,OAAO,OAAO,CAAC,CAAC;AAC9D,CAAC;AAED,iFAAiF;AACjF,KAAK,UAAU,SAAS;IACtB,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IACxC,aAAa,GAAG,CAAC,KAAK,IAAI,EAAE;QAC1B,IAAI,CAAC;YACH,2EAA2E;YAC3E,wEAAwE;YACxE,MAAM,GAAG,GAAG,wDAAa,iBAAiB,GAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;YAClC,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;YACrD,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;QAChE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACvB,iBAAiB,GAAG,IAAI,CAAC;gBACzB,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAChE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0DAA0D,MAAM,IAAI,CAAC,CAAC;YAC7F,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;IACL,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,MAAc,EAAE,OAAe;IACxD,IAAI,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,OAAO,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;IAC1E,IAAI,IAAI,GAAoB,IAAI,CAAC;IACjC,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,GAAG,IAAI,CAAC,CAAC,+DAA+D;IAC9E,CAAC;IACD,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACjC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,MAAc,EAAE,OAAe;IACtD,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;IACvC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACzB,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+EAA+E;AAE/E,oFAAoF;AAC7E,KAAK,UAAU,kBAAkB;IACtC,OAAO,CAAC,MAAM,SAAS,EAAE,CAAC,KAAK,IAAI,CAAC;AACtC,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,WAAW,CAAC,MAAc,EAAE,OAAe;IAC/D,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;IACjC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,mBAAmB,CACjC,GAAW;IAEX,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,qBAAS,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,OAAO;YAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;IACvD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,SAAS,CAAC,QAAgB;IAC9C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAA,cAAO,EAAC,QAAQ,CAAC,CAAC,CAAC;IACxD,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,IAAA,iBAAY,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzD,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC;AACtF,CAAC;AAED;;;;;GAKG;AACH,SAAgB,IAAI,CAAC,IAAU,EAAE,KAAqC;IACpE,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,OAAO,KAAK,KAAK;QAAE,OAAO;IAC9B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,IAAI,KAAK;YAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,SAAgB,qBAAqB;IACnC,aAAa,GAAG,IAAI,CAAC;IACrB,aAAa,CAAC,KAAK,EAAE,CAAC;IACtB,WAAW,CAAC,KAAK,EAAE,CAAC;IACpB,iBAAiB,GAAG,KAAK,CAAC;AAC5B,CAAC"}
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAuSA,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAuSA,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA67DvD"}
|
package/dist/cli.js
CHANGED
|
@@ -318,6 +318,9 @@ async function run(argv) {
|
|
|
318
318
|
xlsx: { type: 'boolean', default: false },
|
|
319
319
|
filter: { type: 'string' },
|
|
320
320
|
all: { type: 'boolean', default: false },
|
|
321
|
+
frontend: { type: 'string' },
|
|
322
|
+
backend: { type: 'string' },
|
|
323
|
+
specs: { type: 'string' },
|
|
321
324
|
'reports-dir': { type: 'string' },
|
|
322
325
|
'json-dir': { type: 'string' },
|
|
323
326
|
'project-name': { type: 'string' },
|
|
@@ -820,6 +823,49 @@ async function run(argv) {
|
|
|
820
823
|
});
|
|
821
824
|
break;
|
|
822
825
|
}
|
|
826
|
+
case 'flow': {
|
|
827
|
+
const subCommand = positionals[1];
|
|
828
|
+
const frontend = values.frontend;
|
|
829
|
+
const backend = values.backend;
|
|
830
|
+
const specs = values.specs;
|
|
831
|
+
// `flow` / `flow map` → the traceability map (writes the graph overlay).
|
|
832
|
+
if (subCommand === undefined || subCommand === 'map') {
|
|
833
|
+
const { runFlowMap } = await Promise.resolve().then(() => __importStar(require('./flow-cli')));
|
|
834
|
+
await runFlowMap({ cwd, frontend, backend, specs, json: !!values.json });
|
|
835
|
+
break;
|
|
836
|
+
}
|
|
837
|
+
// `flow trace "<METHOD> <path>"` → one endpoint's full trace.
|
|
838
|
+
if (subCommand === 'trace') {
|
|
839
|
+
const target = positionals.slice(2).join(' ').trim();
|
|
840
|
+
if (!target) {
|
|
841
|
+
logger.fail('Usage: vyuh-dxkit flow trace "<METHOD> <path>"');
|
|
842
|
+
process.exit(1);
|
|
843
|
+
}
|
|
844
|
+
const { runFlowTrace } = await Promise.resolve().then(() => __importStar(require('./flow-cli')));
|
|
845
|
+
await runFlowTrace({ cwd, frontend, backend, specs, json: !!values.json, target });
|
|
846
|
+
break;
|
|
847
|
+
}
|
|
848
|
+
// `flow extract` → the parity CSVs.
|
|
849
|
+
if (subCommand === 'extract') {
|
|
850
|
+
const { runFlowExtract } = await Promise.resolve().then(() => __importStar(require('./flow-cli')));
|
|
851
|
+
await runFlowExtract({
|
|
852
|
+
cwd,
|
|
853
|
+
frontend,
|
|
854
|
+
backend,
|
|
855
|
+
specs,
|
|
856
|
+
out: values.out,
|
|
857
|
+
json: !!values.json,
|
|
858
|
+
});
|
|
859
|
+
break;
|
|
860
|
+
}
|
|
861
|
+
logger.fail(`Unknown flow subcommand: ${subCommand}`);
|
|
862
|
+
logger.info('Usage:');
|
|
863
|
+
logger.info(' vyuh-dxkit flow [map] [--frontend <dir>] [--backend <dir>] [--specs <a,b>]');
|
|
864
|
+
logger.info(' vyuh-dxkit flow trace "<METHOD> <path>"');
|
|
865
|
+
logger.info(' vyuh-dxkit flow extract [--out <dir>]');
|
|
866
|
+
process.exit(1);
|
|
867
|
+
break;
|
|
868
|
+
}
|
|
823
869
|
case 'vulnerabilities':
|
|
824
870
|
case 'vuln': {
|
|
825
871
|
const targetPath = resolveRepoPath(positionals[1]);
|