@shriyanss/js-recon 1.2.2-alpha.2 → 1.2.2-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/CHANGELOG.md +35 -0
- package/build/endpoints/index.js +1 -0
- package/build/endpoints/index.js.map +1 -1
- package/build/globalConfig.js +2 -1
- package/build/globalConfig.js.map +1 -1
- package/build/index.js +3 -1
- package/build/index.js.map +1 -1
- package/build/lazyLoad/downloadFilesUtil.js +7 -4
- package/build/lazyLoad/downloadFilesUtil.js.map +1 -1
- package/build/lazyLoad/index.js +87 -2
- package/build/lazyLoad/index.js.map +1 -1
- package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js +32 -23
- package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js.map +1 -1
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js +1 -1
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js.map +1 -1
- package/build/lazyLoad/next_js/next_buildId.js +9 -1
- package/build/lazyLoad/next_js/next_buildId.js.map +1 -1
- package/build/lazyLoad/sourcemap.js +188 -0
- package/build/lazyLoad/sourcemap.js.map +1 -0
- package/build/lazyLoad/techDetect/index.js +49 -3
- package/build/lazyLoad/techDetect/index.js.map +1 -1
- package/build/lazyLoad/vue/vue_RuntimeJs.js +101 -0
- package/build/lazyLoad/vue/vue_RuntimeJs.js.map +1 -0
- package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js +96 -0
- package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js.map +1 -0
- package/build/lazyLoad/vue/vue_jsImports.js +65 -0
- package/build/lazyLoad/vue/vue_jsImports.js.map +1 -0
- package/build/lazyLoad/vue/vue_reconstructSourceMaps.js +56 -0
- package/build/lazyLoad/vue/vue_reconstructSourceMaps.js.map +1 -0
- package/build/lazyLoad/vue/vue_sourcemapExtract.js +166 -0
- package/build/lazyLoad/vue/vue_sourcemapExtract.js.map +1 -0
- package/build/map/next_js/getAxiosInstances.js +1 -1
- package/build/map/next_js/getAxiosInstances.js.map +1 -1
- package/build/map/next_js/getWebpackConnections.js +1 -1
- package/build/map/next_js/getWebpackConnections.js.map +1 -1
- package/build/map/next_js/interactive_helpers/commandHelpers.js +1 -1
- package/build/map/next_js/interactive_helpers/commandHelpers.js.map +1 -1
- package/build/map/next_js/resolveAxios.js +61 -17
- package/build/map/next_js/resolveAxios.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/directCallsWithoutAssignment.js +48 -0
- package/build/map/next_js/resolveAxiosHelpers/directCallsWithoutAssignment.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/findAxiosClients.js +8 -8
- package/build/map/next_js/resolveAxiosHelpers/findAxiosClients.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js +302 -0
- package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js +48 -8
- package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js +261 -0
- package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js +10 -3
- package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js +113 -0
- package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js +274 -0
- package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js +506 -0
- package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js.map +1 -0
- package/build/map/next_js/resolveFetch.js +243 -4
- package/build/map/next_js/resolveFetch.js.map +1 -1
- package/build/map/next_js/utils.js +867 -11
- package/build/map/next_js/utils.js.map +1 -1
- package/build/run/index.js +11 -6
- package/build/run/index.js.map +1 -1
- package/build/utility/globals.js.map +1 -1
- package/build/utility/makeReq.js +4 -0
- package/build/utility/makeReq.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import _traverse from "@babel/traverse";
|
|
2
|
+
import * as fs from "fs";
|
|
3
|
+
import parser from "@babel/parser";
|
|
4
|
+
import { astNodeToJsonString } from "./astNodeToJsonString.js";
|
|
5
|
+
import chalk from "chalk";
|
|
6
|
+
import pathModule from "path";
|
|
7
|
+
const traverse = _traverse.default;
|
|
8
|
+
/**
|
|
9
|
+
* Find parameters passed to exported endpoint functions from other chunks
|
|
10
|
+
* that import this chunk
|
|
11
|
+
*
|
|
12
|
+
* @param {string} sourceChunkName - The name of the chunk that exports the endpoint
|
|
13
|
+
* @param {string} exportName - The export name of the endpoint function
|
|
14
|
+
* @param {Chunks} chunks - A dictionary of chunk names to chunk objects
|
|
15
|
+
* @param {string} directory - The directory of the chunk files
|
|
16
|
+
* @returns {Array<{chunkId: string, params: string, file: string, line: number}>} - Array of parameters found in other chunks
|
|
17
|
+
*/
|
|
18
|
+
export const findCrossChunkParameters = (sourceChunkName, exportName, chunks, directory) => {
|
|
19
|
+
const result = [];
|
|
20
|
+
// Find chunks that import the source chunk
|
|
21
|
+
const importingChunks = Object.entries(chunks).filter(([_, chunk]) => {
|
|
22
|
+
return chunk.imports && chunk.imports.includes(sourceChunkName);
|
|
23
|
+
});
|
|
24
|
+
if (importingChunks.length === 0) {
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
// Process each importing chunk
|
|
28
|
+
for (const [importingChunkName, importingChunk] of importingChunks) {
|
|
29
|
+
const chunkCode = importingChunk.code;
|
|
30
|
+
const ast = parser.parse(chunkCode, {
|
|
31
|
+
sourceType: "unambiguous",
|
|
32
|
+
plugins: ["jsx", "typescript"],
|
|
33
|
+
errorRecovery: true,
|
|
34
|
+
});
|
|
35
|
+
// Step 1: Find the third parameter in function declarations
|
|
36
|
+
let thirdArg = "";
|
|
37
|
+
traverse(ast, {
|
|
38
|
+
enter(path) {
|
|
39
|
+
if (path.isFunctionDeclaration() && path.node.params.length >= 3) {
|
|
40
|
+
const thirdParam = path.node.params[2];
|
|
41
|
+
if (thirdParam.type === "Identifier") {
|
|
42
|
+
thirdArg = thirdParam.name;
|
|
43
|
+
path.stop();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else if (path.isAssignmentExpression() &&
|
|
47
|
+
path.node.right.type === "ArrowFunctionExpression" &&
|
|
48
|
+
path.node.right.params.length >= 3) {
|
|
49
|
+
const thirdParam = path.node.right.params[2];
|
|
50
|
+
if (thirdParam.type === "Identifier") {
|
|
51
|
+
thirdArg = thirdParam.name;
|
|
52
|
+
path.stop();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
if (!thirdArg) {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
// Step 2: Find variable assignments using the third arg and source chunk
|
|
61
|
+
// Example: <new_var> = <third_arg>(<chunk_that_exports>);
|
|
62
|
+
const moduleVars = {};
|
|
63
|
+
traverse(ast, {
|
|
64
|
+
VariableDeclarator(path) {
|
|
65
|
+
if (path.node.init &&
|
|
66
|
+
path.node.init.type === "CallExpression" &&
|
|
67
|
+
path.node.init.callee.type === "Identifier" &&
|
|
68
|
+
path.node.init.callee.name === thirdArg &&
|
|
69
|
+
path.node.init.arguments.length > 0 &&
|
|
70
|
+
path.node.id.type === "Identifier") {
|
|
71
|
+
// Found a variable assigned from the third arg function
|
|
72
|
+
// e.g., let moduleVar = n(21222);
|
|
73
|
+
if (path.node.init.arguments[0].type === "NumericLiteral" &&
|
|
74
|
+
path.node.init.arguments[0].value.toString() === sourceChunkName) {
|
|
75
|
+
moduleVars[path.node.id.name] = sourceChunkName;
|
|
76
|
+
}
|
|
77
|
+
else if (path.node.init.arguments[0].type === "StringLiteral" &&
|
|
78
|
+
path.node.init.arguments[0].value === sourceChunkName) {
|
|
79
|
+
moduleVars[path.node.id.name] = sourceChunkName;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
});
|
|
84
|
+
if (Object.keys(moduleVars).length === 0) {
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
// Step 3: Find calls to the exported function and extract parameters
|
|
88
|
+
// Examples:
|
|
89
|
+
// - await (0, <new_var>.<something>)();
|
|
90
|
+
// - (0, <new_var>.<something>)(e)
|
|
91
|
+
for (const moduleVar of Object.keys(moduleVars)) {
|
|
92
|
+
traverse(ast, {
|
|
93
|
+
CallExpression(path) {
|
|
94
|
+
// Helper function to extract and record parameters
|
|
95
|
+
const extractAndRecordParams = (callNode, context = "") => {
|
|
96
|
+
if (callNode.arguments && callNode.arguments.length > 0) {
|
|
97
|
+
// Extract parameters
|
|
98
|
+
const params = astNodeToJsonString(callNode.arguments[0], chunkCode);
|
|
99
|
+
// Find the line number in the file
|
|
100
|
+
const functionFile = `${directory}/${importingChunk.file}`;
|
|
101
|
+
const codeFileContent = fs.readFileSync(functionFile, "utf-8");
|
|
102
|
+
let functionFileLine = -1;
|
|
103
|
+
// Extract code snippet for this call
|
|
104
|
+
const callSnippet = chunkCode.substring(callNode.start, callNode.end);
|
|
105
|
+
// Find line in file
|
|
106
|
+
const lines = codeFileContent.split("\n");
|
|
107
|
+
for (let i = 0; i < lines.length; i++) {
|
|
108
|
+
if (lines[i].includes(callSnippet.trim().substring(0, Math.min(callSnippet.length, 30)))) {
|
|
109
|
+
functionFileLine = i + 1;
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// Log the found parameter usage
|
|
114
|
+
console.log(chalk.cyan(`[+] Found ${context} parameter usage for '${exportName}' in chunk ${importingChunkName} ("${functionFile}":${functionFileLine})`));
|
|
115
|
+
console.log(chalk.magenta(` Params: ${params}`));
|
|
116
|
+
// Add to result
|
|
117
|
+
result.push({
|
|
118
|
+
chunkId: importingChunkName,
|
|
119
|
+
params: params,
|
|
120
|
+
file: functionFile,
|
|
121
|
+
line: functionFileLine,
|
|
122
|
+
});
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
return false;
|
|
126
|
+
};
|
|
127
|
+
// Helper function to check if a node represents a call to our exported function
|
|
128
|
+
const isTargetExportCall = (calleeNode) => {
|
|
129
|
+
// Check direct member expression: moduleVar.exportName
|
|
130
|
+
if (calleeNode.type === "MemberExpression" &&
|
|
131
|
+
calleeNode.object.type === "Identifier" &&
|
|
132
|
+
calleeNode.object.name === moduleVar &&
|
|
133
|
+
calleeNode.property.type === "Identifier" &&
|
|
134
|
+
calleeNode.property.name === exportName) {
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
// Check (0, moduleVar.exportName) pattern
|
|
138
|
+
if (calleeNode.type === "SequenceExpression" &&
|
|
139
|
+
calleeNode.expressions.length === 2 &&
|
|
140
|
+
calleeNode.expressions[0].type === "NumericLiteral" &&
|
|
141
|
+
calleeNode.expressions[0].value === 0 &&
|
|
142
|
+
calleeNode.expressions[1].type === "MemberExpression" &&
|
|
143
|
+
calleeNode.expressions[1].object.type === "Identifier" &&
|
|
144
|
+
calleeNode.expressions[1].object.name === moduleVar &&
|
|
145
|
+
calleeNode.expressions[1].property.type === "Identifier" &&
|
|
146
|
+
calleeNode.expressions[1].property.name === exportName) {
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
149
|
+
return false;
|
|
150
|
+
};
|
|
151
|
+
// 1. Check for direct calls: (0, m.HE)(e) or m.HE(e)
|
|
152
|
+
if (isTargetExportCall(path.node.callee)) {
|
|
153
|
+
extractAndRecordParams(path.node, "direct");
|
|
154
|
+
}
|
|
155
|
+
// 2. Check for awaited calls: await (0, m.HE)(e)
|
|
156
|
+
if (path.parentPath &&
|
|
157
|
+
path.parentPath.isAwaitExpression() &&
|
|
158
|
+
isTargetExportCall(path.node.callee)) {
|
|
159
|
+
extractAndRecordParams(path.node, "awaited");
|
|
160
|
+
}
|
|
161
|
+
// 3. Check for calls wrapped in variable assignments: const result = (0, m.HE)(e)
|
|
162
|
+
if (path.parentPath &&
|
|
163
|
+
(path.parentPath.isVariableDeclarator() || path.parentPath.isAssignmentExpression()) &&
|
|
164
|
+
isTargetExportCall(path.node.callee)) {
|
|
165
|
+
extractAndRecordParams(path.node, "assigned");
|
|
166
|
+
}
|
|
167
|
+
// 4. Check if we're in a function call where one of the arguments is our target call
|
|
168
|
+
const checkForParamInFunctionCall = () => {
|
|
169
|
+
// Get the parent function call
|
|
170
|
+
const parentCall = path.findParent((p) => p.isCallExpression() && p !== path);
|
|
171
|
+
if (!parentCall)
|
|
172
|
+
return false;
|
|
173
|
+
// Check if any of the arguments to the parent function is a call to our export
|
|
174
|
+
if (parentCall.node.arguments) {
|
|
175
|
+
for (let i = 0; i < parentCall.node.arguments.length; i++) {
|
|
176
|
+
const arg = parentCall.node.arguments[i];
|
|
177
|
+
// Check if the argument is an object with properties
|
|
178
|
+
if (arg.type === "ObjectExpression") {
|
|
179
|
+
for (const prop of arg.properties) {
|
|
180
|
+
if (prop.type === "ObjectProperty" &&
|
|
181
|
+
prop.value.type === "CallExpression" &&
|
|
182
|
+
isTargetExportCall(prop.value.callee)) {
|
|
183
|
+
// Found our export being called inside an object passed to another function
|
|
184
|
+
extractAndRecordParams(prop.value, "nested in object");
|
|
185
|
+
return true;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return false;
|
|
192
|
+
};
|
|
193
|
+
checkForParamInFunctionCall();
|
|
194
|
+
// 5. Look for wrapper functions that call our endpoint function with parameters
|
|
195
|
+
const parentFunction = path.findParent((p) => p.isFunction());
|
|
196
|
+
if (parentFunction && path.parentPath && path.parentPath.isCallExpression()) {
|
|
197
|
+
const parentCall = path.parentPath;
|
|
198
|
+
// Check if the current call is to our exported function
|
|
199
|
+
if (isTargetExportCall(path.node.callee) && parentCall.node.arguments.length > 0) {
|
|
200
|
+
extractAndRecordParams(parentCall.node, "wrapper function");
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// 6. Check for complex assignment patterns: b = async (e) => { (await (0, m.HE)(e)).result... }
|
|
204
|
+
const checkForComplexAssignments = () => {
|
|
205
|
+
// Find variable declarations or assignments that are functions
|
|
206
|
+
const funcDecl = path.findParent((p) => (p.isVariableDeclarator() || p.isAssignmentExpression()) &&
|
|
207
|
+
((p.node.init &&
|
|
208
|
+
(p.node.init.type === "ArrowFunctionExpression" ||
|
|
209
|
+
p.node.init.type === "FunctionExpression")) ||
|
|
210
|
+
(p.node.right &&
|
|
211
|
+
(p.node.right.type === "ArrowFunctionExpression" ||
|
|
212
|
+
p.node.right.type === "FunctionExpression"))));
|
|
213
|
+
if (funcDecl) {
|
|
214
|
+
// This call is inside a function declaration
|
|
215
|
+
// Check if this function calls our target export
|
|
216
|
+
if (isTargetExportCall(path.node.callee)) {
|
|
217
|
+
extractAndRecordParams(path.node, "complex function");
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return false;
|
|
221
|
+
};
|
|
222
|
+
checkForComplexAssignments();
|
|
223
|
+
// 7. Check for destructuring from the result of our API call: const { result } = await (0, m.HE)(e)
|
|
224
|
+
if (path.parentPath &&
|
|
225
|
+
path.parentPath.isAwaitExpression() &&
|
|
226
|
+
path.parentPath.parentPath &&
|
|
227
|
+
path.parentPath.parentPath.isVariableDeclarator() &&
|
|
228
|
+
path.parentPath.parentPath.node.id.type === "ObjectPattern" &&
|
|
229
|
+
isTargetExportCall(path.node.callee)) {
|
|
230
|
+
extractAndRecordParams(path.node, "destructured result");
|
|
231
|
+
}
|
|
232
|
+
// 8. Check for property access on the result: (await (0, m.HE)(e)).result
|
|
233
|
+
if (path.parentPath &&
|
|
234
|
+
path.parentPath.isAwaitExpression() &&
|
|
235
|
+
path.parentPath.parentPath &&
|
|
236
|
+
path.parentPath.parentPath.isMemberExpression() &&
|
|
237
|
+
isTargetExportCall(path.node.callee)) {
|
|
238
|
+
extractAndRecordParams(path.node, "property access");
|
|
239
|
+
}
|
|
240
|
+
// 9. Check for conditional expressions: n ? b({ params }) : w({ params })
|
|
241
|
+
if (path.parentPath &&
|
|
242
|
+
path.parentPath.isConditionalExpression() &&
|
|
243
|
+
(path.parentPath.node.consequent === path.node || path.parentPath.node.alternate === path.node)) {
|
|
244
|
+
// This call is part of a ternary operation
|
|
245
|
+
// If there are function calls in either branch, examine them
|
|
246
|
+
const checkBranch = (branchNode) => {
|
|
247
|
+
if (branchNode && branchNode.type === "CallExpression") {
|
|
248
|
+
// Extract object properties that might be parameters
|
|
249
|
+
if (branchNode.arguments && branchNode.arguments.length > 0) {
|
|
250
|
+
const arg = branchNode.arguments[0];
|
|
251
|
+
if (arg.type === "ObjectExpression") {
|
|
252
|
+
// Found a call with object parameters in conditional
|
|
253
|
+
const params = astNodeToJsonString(arg, chunkCode);
|
|
254
|
+
// Find the line number in the file
|
|
255
|
+
const functionFile = pathModule.join(directory, importingChunk.file);
|
|
256
|
+
const codeFileContent = fs.readFileSync(functionFile, "utf-8");
|
|
257
|
+
let functionFileLine = -1;
|
|
258
|
+
// Extract code snippet for this call
|
|
259
|
+
const callSnippet = chunkCode.substring(branchNode.start, branchNode.end);
|
|
260
|
+
// Find line in file
|
|
261
|
+
const lines = codeFileContent.split("\n");
|
|
262
|
+
for (let i = 0; i < lines.length; i++) {
|
|
263
|
+
if (lines[i].includes(callSnippet.trim().substring(0, Math.min(callSnippet.length, 30)))) {
|
|
264
|
+
functionFileLine = i + 1;
|
|
265
|
+
break;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
// Check if the object has references to our export
|
|
269
|
+
for (const prop of arg.properties) {
|
|
270
|
+
if (prop.type === "ObjectProperty" &&
|
|
271
|
+
prop.value.type === "MemberExpression" &&
|
|
272
|
+
prop.value.object &&
|
|
273
|
+
prop.value.object.type === "Identifier" &&
|
|
274
|
+
prop.value.object.name === "e") {
|
|
275
|
+
// This is likely a parameter derived from our export
|
|
276
|
+
console.log(chalk.cyan(`[+] Found conditional branch parameter usage for '${exportName}' in chunk ${importingChunkName} ("${functionFile}":${functionFileLine})`));
|
|
277
|
+
console.log(chalk.magenta(` Params: ${params}`));
|
|
278
|
+
result.push({
|
|
279
|
+
chunkId: importingChunkName,
|
|
280
|
+
params: params,
|
|
281
|
+
file: functionFile,
|
|
282
|
+
line: functionFileLine,
|
|
283
|
+
});
|
|
284
|
+
return true;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
return false;
|
|
291
|
+
};
|
|
292
|
+
checkBranch(path.parentPath.node.consequent);
|
|
293
|
+
checkBranch(path.parentPath.node.alternate);
|
|
294
|
+
}
|
|
295
|
+
},
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
return result;
|
|
300
|
+
};
|
|
301
|
+
export default findCrossChunkParameters;
|
|
302
|
+
//# sourceMappingURL=findCrossChunkParams.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findCrossChunkParams.js","sourceRoot":"","sources":["../../../../src/map/next_js/resolveAxiosHelpers/findCrossChunkParams.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,8 @@ import chalk from "chalk";
|
|
|
5
5
|
import * as globals from "../../../utility/globals.js";
|
|
6
6
|
import { astNodeToJsonString } from "./astNodeToJsonString.js";
|
|
7
7
|
import { resolveNodeValue } from "../utils.js";
|
|
8
|
+
import { traceAxiosInstanceExports } from "./traceAxiosInstanceExports.js";
|
|
9
|
+
import { getThirdArg } from "../resolveAxios.js";
|
|
8
10
|
const traverse = _traverse.default;
|
|
9
11
|
/**
|
|
10
12
|
* Finds the line number of a target line content in a given file content.
|
|
@@ -37,17 +39,54 @@ const findLineNumberByContent = (fileContent, targetLineContent) => {
|
|
|
37
39
|
export const handleAxiosCreate = (path, ast, chunkCode, directory, chunkName, chunks) => {
|
|
38
40
|
let axiosCreateVarName = "";
|
|
39
41
|
let axiosCreateLineNumber = 0;
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
42
|
+
// Find the wrapper function that contains the axios.create() call
|
|
43
|
+
// Pattern: p = ((t) => { let e = n.Z.create({...}) })
|
|
44
|
+
// We want 'p', not 'e'
|
|
45
|
+
// First, traverse up to find if we're inside a function
|
|
46
|
+
let wrapperFunction = path.findParent((p) => p.isArrowFunctionExpression() || p.isFunctionExpression());
|
|
47
|
+
if (wrapperFunction) {
|
|
48
|
+
// Now check if this function is assigned to a variable or wrapped in a call expression
|
|
49
|
+
let assignmentParent = wrapperFunction.findParent((p) => p.isAssignmentExpression() || p.isVariableDeclarator());
|
|
50
|
+
if (assignmentParent) {
|
|
51
|
+
if (assignmentParent.isAssignmentExpression()) {
|
|
52
|
+
// Pattern: p = ((t) => {...})
|
|
53
|
+
const assignment = assignmentParent.node;
|
|
54
|
+
if (assignment.left.type === "Identifier") {
|
|
55
|
+
axiosCreateVarName = assignment.left.name;
|
|
56
|
+
const axiosCreateLineContent = chunkCode.split("\n")[assignment.loc.start.line - 1];
|
|
57
|
+
const chunkFile = fs.readFileSync(fsPath.join(directory, chunks[chunkName].file), "utf-8");
|
|
58
|
+
axiosCreateLineNumber = findLineNumberByContent(chunkFile, axiosCreateLineContent);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else if (assignmentParent.isVariableDeclarator()) {
|
|
62
|
+
// Pattern: const p = ((t) => {...})
|
|
63
|
+
const varDeclarator = assignmentParent.node;
|
|
64
|
+
if (varDeclarator.id.type === "Identifier") {
|
|
65
|
+
axiosCreateVarName = varDeclarator.id.name;
|
|
66
|
+
const axiosCreateLineContent = chunkCode.split("\n")[varDeclarator.loc.start.line - 1];
|
|
67
|
+
const chunkFile = fs.readFileSync(fsPath.join(directory, chunks[chunkName].file), "utf-8");
|
|
68
|
+
axiosCreateLineNumber = findLineNumberByContent(chunkFile, axiosCreateLineContent);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
// Fallback to old logic if not wrapped in a function
|
|
75
|
+
if (path.parentPath.isCallExpression() && path.parentPath.parentPath.isVariableDeclarator()) {
|
|
76
|
+
const varDeclarator = path.parentPath.parentPath.node;
|
|
77
|
+
if (varDeclarator.id.type === "Identifier") {
|
|
78
|
+
axiosCreateVarName = varDeclarator.id.name;
|
|
79
|
+
const axiosCreateLineContent = chunkCode.split("\n")[varDeclarator.loc.start.line - 1];
|
|
80
|
+
const chunkFile = fs.readFileSync(fsPath.join(directory, chunks[chunkName].file), "utf-8");
|
|
81
|
+
axiosCreateLineNumber = findLineNumberByContent(chunkFile, axiosCreateLineContent);
|
|
82
|
+
}
|
|
47
83
|
}
|
|
48
84
|
}
|
|
49
85
|
if (axiosCreateVarName !== "") {
|
|
50
86
|
console.log(chalk.magenta(`[✓] axios.create() assigned to '${axiosCreateVarName}' in chunk ${chunkName} ("${directory}/${chunks[chunkName].file}":${axiosCreateLineNumber})`));
|
|
87
|
+
// Trace if this axios instance is exported and re-used in other chunks
|
|
88
|
+
console.log(chalk.blue(` [→] Tracing axios instance '${axiosCreateVarName}' exports...`));
|
|
89
|
+
traceAxiosInstanceExports(chunkName, axiosCreateVarName, chunks, directory);
|
|
51
90
|
// get the arguments of this axios create. Like .create({})
|
|
52
91
|
let axiosCreateBaseURL;
|
|
53
92
|
const axiosCreateArgs = path.parentPath.node.arguments;
|
|
@@ -88,7 +127,8 @@ export const handleAxiosCreate = (path, ast, chunkCode, directory, chunkName, ch
|
|
|
88
127
|
else {
|
|
89
128
|
const scope = callPath.scope;
|
|
90
129
|
const nodeCode = chunkCode.slice(property.value.start, property.value.end);
|
|
91
|
-
|
|
130
|
+
const thirdArgName = getThirdArg(ast);
|
|
131
|
+
axiosCreateCallUrl = resolveNodeValue(property.value, scope, nodeCode, "axios", chunkCode, chunks, thirdArgName);
|
|
92
132
|
}
|
|
93
133
|
}
|
|
94
134
|
else if (property.key.name === "method" && property.value.type === "StringLiteral") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleAxiosCreate.js","sourceRoot":"","sources":["../../../../src/map/next_js/resolveAxiosHelpers/handleAxiosCreate.ts"],"names":[],"mappings":"AAEA,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,MAAM,MAAM,MAAM,CAAC;AAC/B,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,OAAO,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"handleAxiosCreate.js","sourceRoot":"","sources":["../../../../src/map/next_js/resolveAxiosHelpers/handleAxiosCreate.ts"],"names":[],"mappings":"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"}
|