@shriyanss/js-recon 1.3.1-alpha.2 → 1.3.1-alpha.4
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/.github/workflows/build-and-prettify.yaml +15 -1
- package/.github/workflows/pr_checker.yml +9 -8
- package/.github/workflows/publish-js-recon.yml +13 -1
- package/CHANGELOG.md +96 -0
- package/CLAUDE.md +225 -0
- package/README.md +2 -0
- package/build/analyze/engine/astEngine.js +57 -29
- package/build/analyze/engine/astEngine.js.map +1 -1
- package/build/analyze/engine/index.js +2 -2
- package/build/analyze/engine/index.js.map +1 -1
- package/build/analyze/helpers/engineHelpers/taintFlow.js +32 -0
- package/build/analyze/helpers/engineHelpers/taintFlow.js.map +1 -1
- package/build/analyze/helpers/initRules.js +9 -0
- package/build/analyze/helpers/initRules.js.map +1 -1
- package/build/analyze/helpers/schemas.js +6 -1
- package/build/analyze/helpers/schemas.js.map +1 -1
- package/build/analyze/helpers/validate.js +49 -9
- package/build/analyze/helpers/validate.js.map +1 -1
- package/build/analyze/index.js +10 -4
- package/build/analyze/index.js.map +1 -1
- package/build/endpoints/next_js/client_mappedJsonFile.js +12 -5
- package/build/endpoints/next_js/client_mappedJsonFile.js.map +1 -1
- package/build/fingerprint/index.js +123 -0
- package/build/fingerprint/index.js.map +1 -0
- package/build/globalConfig.js +1 -1
- package/build/index.js +72 -5
- package/build/index.js.map +1 -1
- package/build/lazyLoad/downloadFilesUtil.js +3 -3
- package/build/lazyLoad/downloadFilesUtil.js.map +1 -1
- package/build/lazyLoad/downloadQueue.js +16 -11
- package/build/lazyLoad/downloadQueue.js.map +1 -1
- package/build/lazyLoad/index.js +260 -163
- package/build/lazyLoad/index.js.map +1 -1
- package/build/lazyLoad/next_js/NextJsCrawler.js +58 -16
- package/build/lazyLoad/next_js/NextJsCrawler.js.map +1 -1
- package/build/lazyLoad/next_js/next_GetJSScript.js +8 -4
- package/build/lazyLoad/next_js/next_GetJSScript.js.map +1 -1
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js +149 -139
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js.map +1 -1
- package/build/lazyLoad/next_js/next_SubsequentRequests.js +25 -4
- package/build/lazyLoad/next_js/next_SubsequentRequests.js.map +1 -1
- package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js +13 -5
- package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js.map +1 -1
- package/build/lazyLoad/react/react_followImports.js +105 -0
- package/build/lazyLoad/react/react_followImports.js.map +1 -0
- package/build/lazyLoad/react/react_getScriptTags.js +28 -5
- package/build/lazyLoad/react/react_getScriptTags.js.map +1 -1
- package/build/lazyLoad/svelte/svelte_discoverPagesFromJs.js +162 -0
- package/build/lazyLoad/svelte/svelte_discoverPagesFromJs.js.map +1 -0
- package/build/lazyLoad/svelte/svelte_getFromPageSource.js +15 -0
- package/build/lazyLoad/svelte/svelte_getFromPageSource.js.map +1 -1
- package/build/lazyLoad/svelte/svelte_recursivePageCrawl.js +180 -0
- package/build/lazyLoad/svelte/svelte_recursivePageCrawl.js.map +1 -0
- package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js +15 -1
- package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js.map +1 -1
- package/build/lazyLoad/techDetect/checkReact.js +67 -36
- package/build/lazyLoad/techDetect/checkReact.js.map +1 -1
- package/build/lazyLoad/techDetect/checkSvelte.js +35 -35
- package/build/lazyLoad/techDetect/checkSvelte.js.map +1 -1
- package/build/lazyLoad/techDetect/index.js +31 -25
- package/build/lazyLoad/techDetect/index.js.map +1 -1
- package/build/lazyLoad/vue/vue_getClientSidePaths.js +6 -0
- package/build/lazyLoad/vue/vue_getClientSidePaths.js.map +1 -1
- package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js +6 -0
- package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js.map +1 -1
- package/build/lazyLoad/vue/vue_stringJsFiles.js +6 -0
- package/build/lazyLoad/vue/vue_stringJsFiles.js.map +1 -1
- package/build/load/index.js +316 -0
- package/build/load/index.js.map +1 -0
- package/build/map/graphql/resolveGraphql.js +296 -0
- package/build/map/graphql/resolveGraphql.js.map +1 -0
- package/build/map/index.js +104 -6
- package/build/map/index.js.map +1 -1
- package/build/map/next_js/interactive.js +30 -0
- package/build/map/next_js/interactive.js.map +1 -1
- package/build/map/next_js/interactive_helpers/commandHandler.js +26 -0
- package/build/map/next_js/interactive_helpers/commandHandler.js.map +1 -1
- package/build/map/next_js/interactive_helpers/commandHelpers.js +28 -0
- package/build/map/next_js/interactive_helpers/commandHelpers.js.map +1 -1
- package/build/map/next_js/interactive_helpers/esqueryGen.js +370 -0
- package/build/map/next_js/interactive_helpers/esqueryGen.js.map +1 -0
- package/build/map/next_js/interactive_helpers/helpMenu.js +2 -1
- package/build/map/next_js/interactive_helpers/helpMenu.js.map +1 -1
- package/build/map/next_js/interactive_helpers/inputPatch.js +207 -0
- package/build/map/next_js/interactive_helpers/inputPatch.js.map +1 -0
- package/build/map/next_js/interactive_helpers/ui.js +0 -1
- package/build/map/next_js/interactive_helpers/ui.js.map +1 -1
- package/build/map/next_js/resolveServerActions.js +449 -0
- package/build/map/next_js/resolveServerActions.js.map +1 -0
- package/build/map/next_js/utils.js +89 -2
- package/build/map/next_js/utils.js.map +1 -1
- package/build/map/react_js/getReactConnections.js +298 -0
- package/build/map/react_js/getReactConnections.js.map +1 -0
- package/build/map/react_js/interactive.js +4 -0
- package/build/map/react_js/interactive.js.map +1 -0
- package/build/map/react_js/react_resolveFetch.js +6 -0
- package/build/map/react_js/react_resolveFetch.js.map +1 -0
- package/build/map/svelte_js/interactive.js +58 -0
- package/build/map/svelte_js/interactive.js.map +1 -0
- package/build/map/svelte_js/interactive_helpers/commandHandler.js +4 -0
- package/build/map/svelte_js/interactive_helpers/commandHandler.js.map +1 -0
- package/build/map/vue_js/bodyResolver.js +477 -0
- package/build/map/vue_js/bodyResolver.js.map +1 -0
- package/build/map/vue_js/crossFileResolver.js +438 -0
- package/build/map/vue_js/crossFileResolver.js.map +1 -0
- package/build/map/vue_js/getViteConnections.js +151 -106
- package/build/map/vue_js/getViteConnections.js.map +1 -1
- package/build/map/vue_js/interactive.js +28 -0
- package/build/map/vue_js/interactive.js.map +1 -1
- package/build/map/vue_js/interactive_helpers/commandHandler.js +22 -0
- package/build/map/vue_js/interactive_helpers/commandHandler.js.map +1 -1
- package/build/map/vue_js/interactive_helpers/helpMenu.js +1 -0
- package/build/map/vue_js/interactive_helpers/helpMenu.js.map +1 -1
- package/build/map/vue_js/taint_utils.js +621 -0
- package/build/map/vue_js/taint_utils.js.map +1 -0
- package/build/map/vue_js/vue_resolveFetch.js +279 -25
- package/build/map/vue_js/vue_resolveFetch.js.map +1 -1
- package/build/map/vue_js/vue_resolveHttpClient.js +733 -0
- package/build/map/vue_js/vue_resolveHttpClient.js.map +1 -0
- package/build/map/vue_js/vue_resolveXhr.js +279 -0
- package/build/map/vue_js/vue_resolveXhr.js.map +1 -0
- package/build/mcp/chatOneShot.js +101 -0
- package/build/mcp/chatOneShot.js.map +1 -0
- package/build/mcp/claudeCodeCreds.js +150 -0
- package/build/mcp/claudeCodeCreds.js.map +1 -0
- package/build/mcp/cli.js +140 -149
- package/build/mcp/cli.js.map +1 -1
- package/build/mcp/commands.js +80 -0
- package/build/mcp/commands.js.map +1 -1
- package/build/mcp/index.js +30 -9
- package/build/mcp/index.js.map +1 -1
- package/build/mcp/intent.js +204 -0
- package/build/mcp/intent.js.map +1 -0
- package/build/mcp/jobs.js +199 -0
- package/build/mcp/jobs.js.map +1 -0
- package/build/mcp/mcpServer.js +241 -0
- package/build/mcp/mcpServer.js.map +1 -0
- package/build/mcp/providers.js +18 -1
- package/build/mcp/providers.js.map +1 -1
- package/build/mcp/skills.js +115 -0
- package/build/mcp/skills.js.map +1 -0
- package/build/refactor/index.js +6 -0
- package/build/refactor/index.js.map +1 -1
- package/build/refactor/react/index.js +636 -0
- package/build/refactor/react/index.js.map +1 -0
- package/build/report/utility/populateDb/populateAnalysisFindings.js +1 -1
- package/build/report/utility/populateDb/populateAnalysisFindings.js.map +1 -1
- package/build/run/index.js +277 -60
- package/build/run/index.js.map +1 -1
- package/build/run/interruptHandler.js +93 -0
- package/build/run/interruptHandler.js.map +1 -0
- package/build/utility/globals.js +38 -0
- package/build/utility/globals.js.map +1 -1
- package/build/utility/makeReq.js +39 -5
- package/build/utility/makeReq.js.map +1 -1
- package/build/utility/openapiGenerator.js +61 -17
- package/build/utility/openapiGenerator.js.map +1 -1
- package/build/utility/postmanGenerator.js +69 -16
- package/build/utility/postmanGenerator.js.map +1 -1
- package/build/utility/progressLog.js +50 -0
- package/build/utility/progressLog.js.map +1 -0
- package/package.json +7 -4
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import chalk from "chalk";
|
|
11
|
+
import fs from "fs";
|
|
12
|
+
import path from "path";
|
|
13
|
+
import parser from "@babel/parser";
|
|
14
|
+
import _traverse from "@babel/traverse";
|
|
15
|
+
import { parse as gqlParse, print as gqlPrint, Kind, } from "graphql";
|
|
16
|
+
import * as globals from "../../utility/globals.js";
|
|
17
|
+
const traverse = _traverse.default;
|
|
18
|
+
const OPERATION_TOKEN_RE = /\b(query|mutation|subscription|fragment)\b/;
|
|
19
|
+
const MIN_CANDIDATE_LEN = 20;
|
|
20
|
+
/**
|
|
21
|
+
* Convert a TemplateLiteral AST node into a cooked string with each
|
|
22
|
+
* interpolation replaced by a neutral placeholder. We use a short alphanumeric
|
|
23
|
+
* filler rather than `${...}` because the GraphQL parser would reject the
|
|
24
|
+
* literal `$` syntax. Interpolations inside GraphQL templates almost always
|
|
25
|
+
* sit at value positions (variable defaults, enum names) where a placeholder
|
|
26
|
+
* may or may not parse — failures are silently dropped at the parse stage.
|
|
27
|
+
*/
|
|
28
|
+
const templateLiteralToString = (node) => {
|
|
29
|
+
var _a, _b, _c, _d;
|
|
30
|
+
if (!node || !Array.isArray(node.quasis))
|
|
31
|
+
return "";
|
|
32
|
+
const parts = [];
|
|
33
|
+
for (let i = 0; i < node.quasis.length; i++) {
|
|
34
|
+
const q = node.quasis[i];
|
|
35
|
+
const cooked = (_d = (_b = (_a = q === null || q === void 0 ? void 0 : q.value) === null || _a === void 0 ? void 0 : _a.cooked) !== null && _b !== void 0 ? _b : (_c = q === null || q === void 0 ? void 0 : q.value) === null || _c === void 0 ? void 0 : _c.raw) !== null && _d !== void 0 ? _d : "";
|
|
36
|
+
parts.push(cooked);
|
|
37
|
+
if (i < node.quasis.length - 1) {
|
|
38
|
+
parts.push("__jsrecon_interp__");
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return parts.join("");
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Maps a GraphQL variable type AST node onto an example value that follows
|
|
45
|
+
* the existing `<string>` / `<number>` / `<boolean>` placeholder convention
|
|
46
|
+
* already understood by openapiGenerator's getZodPlaceholderType().
|
|
47
|
+
*/
|
|
48
|
+
const placeholderForType = (typeNode) => {
|
|
49
|
+
if (typeNode.kind === Kind.NON_NULL_TYPE) {
|
|
50
|
+
return placeholderForType(typeNode.type);
|
|
51
|
+
}
|
|
52
|
+
if (typeNode.kind === Kind.LIST_TYPE) {
|
|
53
|
+
return [placeholderForType(typeNode.type)];
|
|
54
|
+
}
|
|
55
|
+
const name = typeNode.name.value;
|
|
56
|
+
switch (name) {
|
|
57
|
+
case "String":
|
|
58
|
+
case "ID":
|
|
59
|
+
return "<string>";
|
|
60
|
+
case "Int":
|
|
61
|
+
case "Float":
|
|
62
|
+
return "<number>";
|
|
63
|
+
case "Boolean":
|
|
64
|
+
return "<boolean>";
|
|
65
|
+
default:
|
|
66
|
+
return "<string>";
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
const buildVariablesStub = (defs) => {
|
|
70
|
+
const out = {};
|
|
71
|
+
if (!defs)
|
|
72
|
+
return out;
|
|
73
|
+
for (const def of defs) {
|
|
74
|
+
out[def.variable.name.value] = placeholderForType(def.type);
|
|
75
|
+
}
|
|
76
|
+
return out;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Captures candidate strings from a JS file's AST. We look at StringLiteral
|
|
80
|
+
* and TemplateLiteral nodes only — both directly carry GraphQL source text in
|
|
81
|
+
* real-world bundles (plain strings from `gql("…")` calls and inlined
|
|
82
|
+
* mutation/query exports; template literals from `gql\`…\``).
|
|
83
|
+
*/
|
|
84
|
+
const collectCandidates = (code) => {
|
|
85
|
+
const candidates = [];
|
|
86
|
+
let ast;
|
|
87
|
+
try {
|
|
88
|
+
ast = parser.parse(code, {
|
|
89
|
+
sourceType: "unambiguous",
|
|
90
|
+
allowReturnOutsideFunction: true,
|
|
91
|
+
allowAwaitOutsideFunction: true,
|
|
92
|
+
allowImportExportEverywhere: true,
|
|
93
|
+
errorRecovery: true,
|
|
94
|
+
plugins: ["jsx", "typescript"],
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
catch (_a) {
|
|
98
|
+
return candidates;
|
|
99
|
+
}
|
|
100
|
+
const seenInFile = new Set();
|
|
101
|
+
traverse(ast, {
|
|
102
|
+
StringLiteral(p) {
|
|
103
|
+
var _a, _b, _c;
|
|
104
|
+
const v = p.node.value;
|
|
105
|
+
if (typeof v !== "string" || v.length < MIN_CANDIDATE_LEN)
|
|
106
|
+
return;
|
|
107
|
+
if (!OPERATION_TOKEN_RE.test(v))
|
|
108
|
+
return;
|
|
109
|
+
if (seenInFile.has(v))
|
|
110
|
+
return;
|
|
111
|
+
seenInFile.add(v);
|
|
112
|
+
candidates.push({ source: v, line: (_c = (_b = (_a = p.node.loc) === null || _a === void 0 ? void 0 : _a.start) === null || _b === void 0 ? void 0 : _b.line) !== null && _c !== void 0 ? _c : 0 });
|
|
113
|
+
},
|
|
114
|
+
TemplateLiteral(p) {
|
|
115
|
+
var _a, _b, _c;
|
|
116
|
+
const v = templateLiteralToString(p.node);
|
|
117
|
+
if (v.length < MIN_CANDIDATE_LEN)
|
|
118
|
+
return;
|
|
119
|
+
if (!OPERATION_TOKEN_RE.test(v))
|
|
120
|
+
return;
|
|
121
|
+
if (seenInFile.has(v))
|
|
122
|
+
return;
|
|
123
|
+
seenInFile.add(v);
|
|
124
|
+
candidates.push({ source: v, line: (_c = (_b = (_a = p.node.loc) === null || _a === void 0 ? void 0 : _a.start) === null || _b === void 0 ? void 0 : _b.line) !== null && _c !== void 0 ? _c : 0 });
|
|
125
|
+
},
|
|
126
|
+
});
|
|
127
|
+
return candidates;
|
|
128
|
+
};
|
|
129
|
+
const tryParse = (source) => {
|
|
130
|
+
try {
|
|
131
|
+
return gqlParse(source, { noLocation: true });
|
|
132
|
+
}
|
|
133
|
+
catch (_a) {
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
/**
|
|
138
|
+
* Re-prints a single operation as a standalone document, inlining any
|
|
139
|
+
* fragment definitions referenced from the operation so the emitted query
|
|
140
|
+
* body is self-contained.
|
|
141
|
+
*/
|
|
142
|
+
const printOperationStandalone = (op, fragments) => {
|
|
143
|
+
const referenced = new Set();
|
|
144
|
+
const visit = (node) => {
|
|
145
|
+
var _a;
|
|
146
|
+
if (!node || typeof node !== "object")
|
|
147
|
+
return;
|
|
148
|
+
if (node.kind === Kind.FRAGMENT_SPREAD && ((_a = node === null || node === void 0 ? void 0 : node.name) === null || _a === void 0 ? void 0 : _a.value)) {
|
|
149
|
+
referenced.add(node.name.value);
|
|
150
|
+
}
|
|
151
|
+
for (const key of Object.keys(node)) {
|
|
152
|
+
const child = node[key];
|
|
153
|
+
if (Array.isArray(child))
|
|
154
|
+
child.forEach(visit);
|
|
155
|
+
else if (child && typeof child === "object" && child.kind)
|
|
156
|
+
visit(child);
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
visit(op);
|
|
160
|
+
// Transitively pull in fragments that reference other fragments
|
|
161
|
+
const out = [];
|
|
162
|
+
const queue = Array.from(referenced);
|
|
163
|
+
const added = new Set();
|
|
164
|
+
while (queue.length > 0) {
|
|
165
|
+
const name = queue.shift();
|
|
166
|
+
if (added.has(name))
|
|
167
|
+
continue;
|
|
168
|
+
const frag = fragments.get(name);
|
|
169
|
+
if (!frag)
|
|
170
|
+
continue;
|
|
171
|
+
added.add(name);
|
|
172
|
+
out.push(frag);
|
|
173
|
+
visit(frag);
|
|
174
|
+
for (const ref of referenced) {
|
|
175
|
+
if (!added.has(ref) && !queue.includes(ref))
|
|
176
|
+
queue.push(ref);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
const doc = { kind: Kind.DOCUMENT, definitions: [op, ...out] };
|
|
180
|
+
return gqlPrint(doc);
|
|
181
|
+
};
|
|
182
|
+
/**
|
|
183
|
+
* Scans every JS file under `directory` for embedded GraphQL operations and
|
|
184
|
+
* emits one OpenAPI POST entry per distinct operation under a flat
|
|
185
|
+
* `GraphQL` collection folder. The endpoint URL is parameterised via the
|
|
186
|
+
* `{{graphqlEndpoint}}` placeholder so importers can substitute the real
|
|
187
|
+
* path at import time — this resolver does not attempt to locate the
|
|
188
|
+
* transport URL in the bundle.
|
|
189
|
+
*/
|
|
190
|
+
const resolveGraphql = (directory) => __awaiter(void 0, void 0, void 0, function* () {
|
|
191
|
+
var _a;
|
|
192
|
+
console.log(chalk.cyan("[i] Scanning for embedded GraphQL operations"));
|
|
193
|
+
let files;
|
|
194
|
+
try {
|
|
195
|
+
files = fs.readdirSync(directory, { recursive: true, encoding: "utf8" });
|
|
196
|
+
}
|
|
197
|
+
catch (_b) {
|
|
198
|
+
console.log(chalk.red(`[!] Could not read directory: ${directory}`));
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
files = files.filter((f) => f.endsWith(".js") || f.endsWith(".mjs"));
|
|
202
|
+
const total = files.length;
|
|
203
|
+
console.log(chalk.cyan(`[i] Scanning ${total} JS file(s) for GraphQL operations`));
|
|
204
|
+
// Two-phase to handle fragment-only files: first collect ALL fragments
|
|
205
|
+
// across all files, then emit operations with their fragment closures.
|
|
206
|
+
const allFragments = new Map();
|
|
207
|
+
const pendingOps = [];
|
|
208
|
+
let lastPct = -1;
|
|
209
|
+
const startTs = Date.now();
|
|
210
|
+
for (let i = 0; i < total; i++) {
|
|
211
|
+
if (i > 0 && i % 50 === 0)
|
|
212
|
+
yield new Promise((r) => setImmediate(r));
|
|
213
|
+
const pct = total === 0 ? 100 : Math.floor(((i + 1) * 100) / total);
|
|
214
|
+
if (pct !== lastPct && (pct % 10 === 0 || pct === 100)) {
|
|
215
|
+
const elapsed = ((Date.now() - startTs) / 1000).toFixed(1);
|
|
216
|
+
console.log(chalk.gray(` [scan] ${pct}% (${i + 1}/${total}) ops=${pendingOps.length} fragments=${allFragments.size} elapsed=${elapsed}s`));
|
|
217
|
+
lastPct = pct;
|
|
218
|
+
}
|
|
219
|
+
const rel = files[i];
|
|
220
|
+
const filePath = path.join(directory, rel);
|
|
221
|
+
let stat;
|
|
222
|
+
try {
|
|
223
|
+
stat = fs.lstatSync(filePath);
|
|
224
|
+
}
|
|
225
|
+
catch (_c) {
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
if (stat.isDirectory())
|
|
229
|
+
continue;
|
|
230
|
+
let content;
|
|
231
|
+
try {
|
|
232
|
+
content = fs.readFileSync(filePath, "utf-8");
|
|
233
|
+
}
|
|
234
|
+
catch (_d) {
|
|
235
|
+
continue;
|
|
236
|
+
}
|
|
237
|
+
if (!OPERATION_TOKEN_RE.test(content))
|
|
238
|
+
continue;
|
|
239
|
+
const candidates = collectCandidates(content);
|
|
240
|
+
for (const c of candidates) {
|
|
241
|
+
const doc = tryParse(c.source);
|
|
242
|
+
if (!doc)
|
|
243
|
+
continue;
|
|
244
|
+
for (const def of doc.definitions) {
|
|
245
|
+
if (def.kind === Kind.OPERATION_DEFINITION) {
|
|
246
|
+
pendingOps.push({ op: def, filePath, line: c.line });
|
|
247
|
+
}
|
|
248
|
+
else if (def.kind === Kind.FRAGMENT_DEFINITION) {
|
|
249
|
+
const name = def.name.value;
|
|
250
|
+
if (!allFragments.has(name))
|
|
251
|
+
allFragments.set(name, def);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
const emittedKeys = new Set();
|
|
257
|
+
let emitted = 0;
|
|
258
|
+
let anonCounter = 0;
|
|
259
|
+
for (const { op, filePath, line } of pendingOps) {
|
|
260
|
+
const printedQuery = printOperationStandalone(op, allFragments);
|
|
261
|
+
const operationName = (_a = op.name) === null || _a === void 0 ? void 0 : _a.value;
|
|
262
|
+
const variables = buildVariablesStub(op.variableDefinitions);
|
|
263
|
+
const bodyObj = { query: printedQuery };
|
|
264
|
+
if (operationName)
|
|
265
|
+
bodyObj.operationName = operationName;
|
|
266
|
+
if (Object.keys(variables).length > 0)
|
|
267
|
+
bodyObj.variables = variables;
|
|
268
|
+
// Dedupe key: normalized query + operationName. A fragment used by
|
|
269
|
+
// multiple operations still produces distinct entries because the
|
|
270
|
+
// surrounding operation differs.
|
|
271
|
+
const dedupeKey = `${operationName !== null && operationName !== void 0 ? operationName : ""}::${printedQuery}`;
|
|
272
|
+
if (emittedKeys.has(dedupeKey))
|
|
273
|
+
continue;
|
|
274
|
+
emittedKeys.add(dedupeKey);
|
|
275
|
+
const summary = operationName !== null && operationName !== void 0 ? operationName : `anonymous ${op.operation} #${++anonCounter}`;
|
|
276
|
+
globals.addOpenapiOutput({
|
|
277
|
+
url: "/{{graphqlEndpoint}}",
|
|
278
|
+
method: "POST",
|
|
279
|
+
path: "/{{graphqlEndpoint}}",
|
|
280
|
+
headers: {
|
|
281
|
+
"Content-Type": "application/json",
|
|
282
|
+
Accept: "application/json",
|
|
283
|
+
},
|
|
284
|
+
body: JSON.stringify(bodyObj),
|
|
285
|
+
chunkId: "",
|
|
286
|
+
functionFile: filePath,
|
|
287
|
+
functionFileLine: line,
|
|
288
|
+
summary,
|
|
289
|
+
collectionFolder: "GraphQL",
|
|
290
|
+
});
|
|
291
|
+
emitted++;
|
|
292
|
+
}
|
|
293
|
+
console.log(chalk.green(`[✓] GraphQL: emitted ${emitted} operation(s) from ${allFragments.size} fragment(s) and ${pendingOps.length} parsed operation(s)`));
|
|
294
|
+
});
|
|
295
|
+
export default resolveGraphql;
|
|
296
|
+
//# sourceMappingURL=resolveGraphql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveGraphql.js","sourceRoot":"","sources":["../../../src/map/graphql/resolveGraphql.ts"],"names":[],"mappings":"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"}
|
package/build/map/index.js
CHANGED
|
@@ -15,21 +15,34 @@ import getTurbopackConnections from "./next_js/getTurbopackConnections.js";
|
|
|
15
15
|
import getFetchInstances from "./next_js/getFetchInstances.js";
|
|
16
16
|
import resolveFetch from "./next_js/resolveFetch.js";
|
|
17
17
|
import resolveNewRequest from "./next_js/resolveNewRequest.js";
|
|
18
|
-
import interactive from "./next_js/interactive.js";
|
|
18
|
+
import interactive, { runCommands as nextRunCommands } from "./next_js/interactive.js";
|
|
19
19
|
import { existsSync, readFileSync } from "fs";
|
|
20
20
|
import getAxiosInstances from "./next_js/getAxiosInstances.js";
|
|
21
21
|
import resolveAxios from "./next_js/resolveAxios.js";
|
|
22
|
-
import { getOpenapi, getOpenapiOutput, getOpenapiOutputFile } from "../utility/globals.js";
|
|
22
|
+
import { getOpenapi, getOpenapiOutput, getOpenapiOutputFile, getGraphqlEnabled } from "../utility/globals.js";
|
|
23
|
+
import resolveGraphql from "./graphql/resolveGraphql.js";
|
|
23
24
|
import { generateOpenapiV3Spec } from "../utility/openapiGenerator.js";
|
|
24
25
|
import { generatePostmanCollection } from "../utility/postmanGenerator.js";
|
|
25
26
|
import getExports from "./next_js/getExports.js";
|
|
27
|
+
import resolveServerActions from "./next_js/resolveServerActions.js";
|
|
26
28
|
// Vue.JS
|
|
27
29
|
import getViteConnections from "./vue_js/getViteConnections.js";
|
|
28
|
-
import vueInteractive from "./vue_js/interactive.js";
|
|
30
|
+
import vueInteractive, { runCommands as vueRunCommands } from "./vue_js/interactive.js";
|
|
29
31
|
import vue_resolveFetch from "./vue_js/vue_resolveFetch.js";
|
|
32
|
+
// Svelte/Astro
|
|
33
|
+
import svelteInteractive, { runCommands as svelteRunCommands } from "./svelte_js/interactive.js";
|
|
34
|
+
// React
|
|
35
|
+
import getReactConnections from "./react_js/getReactConnections.js";
|
|
36
|
+
import reactInteractive, { runCommands as reactRunCommands } from "./react_js/interactive.js";
|
|
37
|
+
import react_resolveFetch from "./react_js/react_resolveFetch.js";
|
|
38
|
+
// XHR resolution (shared across Vite-based techs)
|
|
39
|
+
import vue_resolveXhr from "./vue_js/vue_resolveXhr.js";
|
|
40
|
+
import vue_resolveHttpClient from "./vue_js/vue_resolveHttpClient.js";
|
|
30
41
|
const availableTech = {
|
|
31
42
|
next: "Next.JS",
|
|
32
43
|
vue: "Vue.JS",
|
|
44
|
+
react: "React",
|
|
45
|
+
svelte: "Svelte/Astro",
|
|
33
46
|
};
|
|
34
47
|
const availableFormats = {
|
|
35
48
|
json: "JSON",
|
|
@@ -52,7 +65,7 @@ const availableFormats = {
|
|
|
52
65
|
* @param interactive_mode - Whether to launch interactive mode after analysis
|
|
53
66
|
* @returns Promise that resolves when mapping analysis is complete
|
|
54
67
|
*/
|
|
55
|
-
const map = (
|
|
68
|
+
const map = (directory_1, output_1, formats_1, tech_1, list_1, interactive_mode_1, ...args_1) => __awaiter(void 0, [directory_1, output_1, formats_1, tech_1, list_1, interactive_mode_1, ...args_1], void 0, function* (directory, output, formats, tech, list, interactive_mode, commands = []) {
|
|
56
69
|
console.log(chalk.cyan("[i] Running 'map' module"));
|
|
57
70
|
if (list) {
|
|
58
71
|
console.log(chalk.cyan("Available technologies:"));
|
|
@@ -106,9 +119,17 @@ const map = (directory, output, formats, tech, list, interactive_mode) => __awai
|
|
|
106
119
|
yield resolveAxios(chunks, directory);
|
|
107
120
|
// wrapper-class HTTP requests: new X({url, method, ...})
|
|
108
121
|
yield resolveNewRequest(chunks, directory);
|
|
109
|
-
|
|
122
|
+
// Next.js Server Actions registered via createServerReference(...)
|
|
123
|
+
yield resolveServerActions(chunks, directory);
|
|
124
|
+
if (commands.length > 0) {
|
|
125
|
+
yield nextRunCommands(chunks, `${output}.json`, commands);
|
|
126
|
+
}
|
|
127
|
+
else if (interactive_mode) {
|
|
110
128
|
yield interactive(chunks, `${output}.json`);
|
|
111
129
|
}
|
|
130
|
+
if (getOpenapi() === true && getGraphqlEnabled()) {
|
|
131
|
+
yield resolveGraphql(directory);
|
|
132
|
+
}
|
|
112
133
|
// check if the openapi output is enabled. if so, then write to file
|
|
113
134
|
if (getOpenapi() === true) {
|
|
114
135
|
// convert the openapi output to JSON
|
|
@@ -140,9 +161,17 @@ const map = (directory, output, formats, tech, list, interactive_mode) => __awai
|
|
|
140
161
|
}
|
|
141
162
|
// Resolve fetch instances across all Vue.JS files
|
|
142
163
|
yield vue_resolveFetch(directory);
|
|
143
|
-
|
|
164
|
+
yield vue_resolveXhr(directory);
|
|
165
|
+
yield vue_resolveHttpClient(directory);
|
|
166
|
+
if (commands.length > 0) {
|
|
167
|
+
yield vueRunCommands(chunks, `${output}.json`, commands);
|
|
168
|
+
}
|
|
169
|
+
else if (interactive_mode) {
|
|
144
170
|
yield vueInteractive(chunks, `${output}.json`);
|
|
145
171
|
}
|
|
172
|
+
if (getOpenapi() === true && getGraphqlEnabled()) {
|
|
173
|
+
yield resolveGraphql(directory);
|
|
174
|
+
}
|
|
146
175
|
// Generate OpenAPI spec and Postman collection if enabled
|
|
147
176
|
if (getOpenapi() === true) {
|
|
148
177
|
const openapiSpec = generateOpenapiV3Spec(getOpenapiOutput(), chunks);
|
|
@@ -158,6 +187,75 @@ const map = (directory, output, formats, tech, list, interactive_mode) => __awai
|
|
|
158
187
|
console.log(chalk.green(`[✓] Generated Postman Collection at ${postmanOutputFile}`));
|
|
159
188
|
}
|
|
160
189
|
}
|
|
190
|
+
else if (tech === "react") {
|
|
191
|
+
let chunks;
|
|
192
|
+
if (!existsSync(`${output}.json`)) {
|
|
193
|
+
chunks = yield getReactConnections(directory, output, formats);
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
chunks = JSON.parse(readFileSync(`${output}.json`, { encoding: "utf8" }));
|
|
197
|
+
}
|
|
198
|
+
yield react_resolveFetch(directory);
|
|
199
|
+
yield vue_resolveXhr(directory, "React");
|
|
200
|
+
yield vue_resolveHttpClient(directory, "React");
|
|
201
|
+
if (commands.length > 0) {
|
|
202
|
+
yield reactRunCommands(chunks, `${output}.json`, commands);
|
|
203
|
+
}
|
|
204
|
+
else if (interactive_mode) {
|
|
205
|
+
yield reactInteractive(chunks, `${output}.json`);
|
|
206
|
+
}
|
|
207
|
+
if (getOpenapi() === true && getGraphqlEnabled()) {
|
|
208
|
+
yield resolveGraphql(directory);
|
|
209
|
+
}
|
|
210
|
+
if (getOpenapi() === true) {
|
|
211
|
+
const openapiSpec = generateOpenapiV3Spec(getOpenapiOutput(), chunks);
|
|
212
|
+
const openapiJson = JSON.stringify(openapiSpec, null, 2);
|
|
213
|
+
fs.writeFileSync(getOpenapiOutputFile(), openapiJson);
|
|
214
|
+
console.log(chalk.green(`[✓] Generated OpenAPI spec at ${getOpenapiOutputFile()}`));
|
|
215
|
+
const postmanCollection = generatePostmanCollection(getOpenapiOutput());
|
|
216
|
+
const openapiOutputFile = getOpenapiOutputFile();
|
|
217
|
+
const postmanOutputFile = openapiOutputFile.endsWith(".json")
|
|
218
|
+
? openapiOutputFile.replace(/\.json$/, ".postman_collection.json")
|
|
219
|
+
: `${openapiOutputFile}.postman_collection.json`;
|
|
220
|
+
fs.writeFileSync(postmanOutputFile, JSON.stringify(postmanCollection, null, 2));
|
|
221
|
+
console.log(chalk.green(`[✓] Generated Postman Collection at ${postmanOutputFile}`));
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
else if (tech === "svelte") {
|
|
225
|
+
let chunks;
|
|
226
|
+
if (!existsSync(`${output}.json`)) {
|
|
227
|
+
// Astro+Svelte uses Vite — same chunk format as Vue.JS
|
|
228
|
+
chunks = yield getViteConnections(directory, output, formats);
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
chunks = JSON.parse(readFileSync(`${output}.json`, { encoding: "utf8" }));
|
|
232
|
+
}
|
|
233
|
+
yield vue_resolveFetch(directory, "Svelte/Astro");
|
|
234
|
+
yield vue_resolveXhr(directory, "Svelte/Astro");
|
|
235
|
+
yield vue_resolveHttpClient(directory, "Svelte/Astro");
|
|
236
|
+
if (commands.length > 0) {
|
|
237
|
+
yield svelteRunCommands(chunks, `${output}.json`, commands);
|
|
238
|
+
}
|
|
239
|
+
else if (interactive_mode) {
|
|
240
|
+
yield svelteInteractive(chunks, `${output}.json`);
|
|
241
|
+
}
|
|
242
|
+
if (getOpenapi() === true && getGraphqlEnabled()) {
|
|
243
|
+
yield resolveGraphql(directory);
|
|
244
|
+
}
|
|
245
|
+
if (getOpenapi() === true) {
|
|
246
|
+
const openapiSpec = generateOpenapiV3Spec(getOpenapiOutput(), chunks);
|
|
247
|
+
const openapiJson = JSON.stringify(openapiSpec, null, 2);
|
|
248
|
+
fs.writeFileSync(getOpenapiOutputFile(), openapiJson);
|
|
249
|
+
console.log(chalk.green(`[✓] Generated OpenAPI spec at ${getOpenapiOutputFile()}`));
|
|
250
|
+
const postmanCollection = generatePostmanCollection(getOpenapiOutput());
|
|
251
|
+
const openapiOutputFile = getOpenapiOutputFile();
|
|
252
|
+
const postmanOutputFile = openapiOutputFile.endsWith(".json")
|
|
253
|
+
? openapiOutputFile.replace(/\.json$/, ".postman_collection.json")
|
|
254
|
+
: `${openapiOutputFile}.postman_collection.json`;
|
|
255
|
+
fs.writeFileSync(postmanOutputFile, JSON.stringify(postmanCollection, null, 2));
|
|
256
|
+
console.log(chalk.green(`[✓] Generated Postman Collection at ${postmanOutputFile}`));
|
|
257
|
+
}
|
|
258
|
+
}
|
|
161
259
|
});
|
|
162
260
|
export default map;
|
|
163
261
|
//# sourceMappingURL=index.js.map
|
package/build/map/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/map/index.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,UAAU;AACV,OAAO,qBAAqB,MAAM,oCAAoC,CAAC;AACvE,OAAO,uBAAuB,MAAM,sCAAsC,CAAC;AAC3E,OAAO,iBAAiB,MAAM,gCAAgC,CAAC;AAC/D,OAAO,YAAY,MAAM,2BAA2B,CAAC;AACrD,OAAO,iBAAiB,MAAM,gCAAgC,CAAC;AAC/D,OAAO,WAAW,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/map/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
import { createUI } from "./interactive_helpers/ui.js";
|
|
11
11
|
import { handleCommand } from "./interactive_helpers/commandHandler.js";
|
|
12
12
|
import { setupKeybindings } from "./interactive_helpers/keybindings.js";
|
|
13
|
+
import { enableCursorInput } from "./interactive_helpers/inputPatch.js";
|
|
13
14
|
/**
|
|
14
15
|
* Starts the interactive mode.
|
|
15
16
|
* @param {Chunks} chunks - A dictionary of chunk names to chunk objects.
|
|
@@ -32,8 +33,37 @@ const interactive = (chunks, map_file) => __awaiter(void 0, void 0, void 0, func
|
|
|
32
33
|
yield handleCommand(text, state, ui);
|
|
33
34
|
}));
|
|
34
35
|
setupKeybindings(ui.screen, ui.inputBox, ui.outputBox, state);
|
|
36
|
+
enableCursorInput(ui.inputBox);
|
|
35
37
|
ui.inputBox.focus();
|
|
36
38
|
ui.screen.render();
|
|
37
39
|
});
|
|
40
|
+
/**
|
|
41
|
+
* Run a list of interactive-mode commands non-interactively. The blessed UI is
|
|
42
|
+
* replaced by a thin shim that pipes `outputBox.log` to stdout, so a caller
|
|
43
|
+
* (e.g. `map -c ...` or `run -c ...`) can drive the same command surface
|
|
44
|
+
* without a TTY.
|
|
45
|
+
*/
|
|
46
|
+
const runCommands = (chunks, map_file, commands) => __awaiter(void 0, void 0, void 0, function* () {
|
|
47
|
+
const state = {
|
|
48
|
+
chunks,
|
|
49
|
+
lastCommandStatus: true,
|
|
50
|
+
functionNavHistory: [],
|
|
51
|
+
functionNavHistoryIndex: -1,
|
|
52
|
+
funcWriteFile: undefined,
|
|
53
|
+
commandHistory: [],
|
|
54
|
+
commandHistoryIndex: -1,
|
|
55
|
+
writeimports: false,
|
|
56
|
+
mapFile: map_file,
|
|
57
|
+
};
|
|
58
|
+
const headlessUi = {
|
|
59
|
+
screen: { render: () => { } },
|
|
60
|
+
outputBox: { log: (s) => console.log(s), setText: () => { } },
|
|
61
|
+
inputBox: { clearValue: () => { }, focus: () => { } },
|
|
62
|
+
};
|
|
63
|
+
for (const command of commands) {
|
|
64
|
+
yield handleCommand(command, state, headlessUi);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
export { runCommands };
|
|
38
68
|
export default interactive;
|
|
39
69
|
//# sourceMappingURL=interactive.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../../src/map/next_js/interactive.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAexE;;;;GAIG;AACH,MAAM,WAAW,GAAG,CAAO,MAAc,EAAE,QAAgB,EAAE,EAAE;IAC3D,MAAM,KAAK,GAAG;QACV,MAAM;QACN,iBAAiB,EAAE,IAAI;QACvB,kBAAkB,EAAE,EAAE;QACtB,uBAAuB,EAAE,CAAC,CAAC;QAC3B,aAAa,EAAE,SAAS;QACxB,cAAc,EAAE,EAAE;QAClB,mBAAmB,EAAE,CAAC,CAAC;QACvB,YAAY,EAAE,KAAK;QACnB,OAAO,EAAE,QAAQ;KACpB,CAAC;IAEF,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;IAEtB,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAO,IAAY,EAAE,EAAE;QAC5C,MAAM,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IACzC,CAAC,CAAA,CAAC,CAAC;IAEH,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../../src/map/next_js/interactive.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAexE;;;;GAIG;AACH,MAAM,WAAW,GAAG,CAAO,MAAc,EAAE,QAAgB,EAAE,EAAE;IAC3D,MAAM,KAAK,GAAG;QACV,MAAM;QACN,iBAAiB,EAAE,IAAI;QACvB,kBAAkB,EAAE,EAAE;QACtB,uBAAuB,EAAE,CAAC,CAAC;QAC3B,aAAa,EAAE,SAAS;QACxB,cAAc,EAAE,EAAE;QAClB,mBAAmB,EAAE,CAAC,CAAC;QACvB,YAAY,EAAE,KAAK;QACnB,OAAO,EAAE,QAAQ;KACpB,CAAC;IAEF,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;IAEtB,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAO,IAAY,EAAE,EAAE;QAC5C,MAAM,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IACzC,CAAC,CAAA,CAAC,CAAC;IAEH,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC9D,iBAAiB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IAE/B,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACpB,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;AACvB,CAAC,CAAA,CAAC;AAEF;;;;;GAKG;AACH,MAAM,WAAW,GAAG,CAAO,MAAc,EAAE,QAAgB,EAAE,QAAkB,EAAiB,EAAE;IAC9F,MAAM,KAAK,GAAU;QACjB,MAAM;QACN,iBAAiB,EAAE,IAAI;QACvB,kBAAkB,EAAE,EAAE;QACtB,uBAAuB,EAAE,CAAC,CAAC;QAC3B,aAAa,EAAE,SAAS;QACxB,cAAc,EAAE,EAAE;QAClB,mBAAmB,EAAE,CAAC,CAAC;QACvB,YAAY,EAAE,KAAK;QACnB,OAAO,EAAE,QAAQ;KACpB,CAAC;IAEF,MAAM,UAAU,GAAQ;QACpB,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE;QAC5B,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE;QACpE,QAAQ,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE;KACtD,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC7B,MAAM,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IACpD,CAAC;AACL,CAAC,CAAA,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,eAAe,WAAW,CAAC"}
|
|
@@ -12,6 +12,7 @@ import path from "path";
|
|
|
12
12
|
import commandHelpers from "./commandHelpers.js";
|
|
13
13
|
import { helpMenu } from "./helpMenu.js";
|
|
14
14
|
import { printFunction } from "./printer.js";
|
|
15
|
+
import { runEsqueryCommand } from "./esqueryGen.js";
|
|
15
16
|
import fs from "fs";
|
|
16
17
|
/**
|
|
17
18
|
* Handle user input commands.
|
|
@@ -80,6 +81,10 @@ function handleCommand(text, state, ui) {
|
|
|
80
81
|
outputBox.log(commandHelpers.navHistory(state.chunks, state.functionNavHistory));
|
|
81
82
|
state.lastCommandStatus = true;
|
|
82
83
|
}
|
|
84
|
+
else if (option === "server_actions") {
|
|
85
|
+
outputBox.log(commandHelpers.listServerActions());
|
|
86
|
+
state.lastCommandStatus = true;
|
|
87
|
+
}
|
|
83
88
|
else if (option === "exportnames") {
|
|
84
89
|
// get the chunk id
|
|
85
90
|
const chunkId = text.split(" ")[2];
|
|
@@ -252,6 +257,27 @@ function handleCommand(text, state, ui) {
|
|
|
252
257
|
}
|
|
253
258
|
}
|
|
254
259
|
}
|
|
260
|
+
else if (text.startsWith("esquery")) {
|
|
261
|
+
const usage = helpMenu.esquery;
|
|
262
|
+
const parts = text.split(" ");
|
|
263
|
+
if (parts.length < 3) {
|
|
264
|
+
outputBox.log(chalk.magenta(usage));
|
|
265
|
+
state.lastCommandStatus = false;
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
const chunkId = parts[1];
|
|
269
|
+
const search = parts.slice(2).join(" ");
|
|
270
|
+
try {
|
|
271
|
+
const result = runEsqueryCommand(state.chunks, chunkId, search);
|
|
272
|
+
outputBox.log(result);
|
|
273
|
+
state.lastCommandStatus = true;
|
|
274
|
+
}
|
|
275
|
+
catch (err) {
|
|
276
|
+
outputBox.log(chalk.red(err instanceof Error ? err.message : String(err)));
|
|
277
|
+
state.lastCommandStatus = false;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
255
281
|
else if (text.startsWith("trace")) {
|
|
256
282
|
const usage = helpMenu.trace;
|
|
257
283
|
if (text.split(" ").length < 2) {
|