@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.
Files changed (67) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/build/endpoints/index.js +1 -0
  3. package/build/endpoints/index.js.map +1 -1
  4. package/build/globalConfig.js +2 -1
  5. package/build/globalConfig.js.map +1 -1
  6. package/build/index.js +3 -1
  7. package/build/index.js.map +1 -1
  8. package/build/lazyLoad/downloadFilesUtil.js +7 -4
  9. package/build/lazyLoad/downloadFilesUtil.js.map +1 -1
  10. package/build/lazyLoad/index.js +87 -2
  11. package/build/lazyLoad/index.js.map +1 -1
  12. package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js +32 -23
  13. package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js.map +1 -1
  14. package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js +1 -1
  15. package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js.map +1 -1
  16. package/build/lazyLoad/next_js/next_buildId.js +9 -1
  17. package/build/lazyLoad/next_js/next_buildId.js.map +1 -1
  18. package/build/lazyLoad/sourcemap.js +188 -0
  19. package/build/lazyLoad/sourcemap.js.map +1 -0
  20. package/build/lazyLoad/techDetect/index.js +49 -3
  21. package/build/lazyLoad/techDetect/index.js.map +1 -1
  22. package/build/lazyLoad/vue/vue_RuntimeJs.js +101 -0
  23. package/build/lazyLoad/vue/vue_RuntimeJs.js.map +1 -0
  24. package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js +96 -0
  25. package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js.map +1 -0
  26. package/build/lazyLoad/vue/vue_jsImports.js +65 -0
  27. package/build/lazyLoad/vue/vue_jsImports.js.map +1 -0
  28. package/build/lazyLoad/vue/vue_reconstructSourceMaps.js +56 -0
  29. package/build/lazyLoad/vue/vue_reconstructSourceMaps.js.map +1 -0
  30. package/build/lazyLoad/vue/vue_sourcemapExtract.js +166 -0
  31. package/build/lazyLoad/vue/vue_sourcemapExtract.js.map +1 -0
  32. package/build/map/next_js/getAxiosInstances.js +1 -1
  33. package/build/map/next_js/getAxiosInstances.js.map +1 -1
  34. package/build/map/next_js/getWebpackConnections.js +1 -1
  35. package/build/map/next_js/getWebpackConnections.js.map +1 -1
  36. package/build/map/next_js/interactive_helpers/commandHelpers.js +1 -1
  37. package/build/map/next_js/interactive_helpers/commandHelpers.js.map +1 -1
  38. package/build/map/next_js/resolveAxios.js +61 -17
  39. package/build/map/next_js/resolveAxios.js.map +1 -1
  40. package/build/map/next_js/resolveAxiosHelpers/directCallsWithoutAssignment.js +48 -0
  41. package/build/map/next_js/resolveAxiosHelpers/directCallsWithoutAssignment.js.map +1 -0
  42. package/build/map/next_js/resolveAxiosHelpers/findAxiosClients.js +8 -8
  43. package/build/map/next_js/resolveAxiosHelpers/findAxiosClients.js.map +1 -1
  44. package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js +302 -0
  45. package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js.map +1 -0
  46. package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js +48 -8
  47. package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js.map +1 -1
  48. package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js +261 -0
  49. package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js.map +1 -0
  50. package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js +10 -3
  51. package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js.map +1 -1
  52. package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js +113 -0
  53. package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js.map +1 -0
  54. package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js +274 -0
  55. package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js.map +1 -0
  56. package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js +506 -0
  57. package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js.map +1 -0
  58. package/build/map/next_js/resolveFetch.js +243 -4
  59. package/build/map/next_js/resolveFetch.js.map +1 -1
  60. package/build/map/next_js/utils.js +867 -11
  61. package/build/map/next_js/utils.js.map +1 -1
  62. package/build/run/index.js +11 -6
  63. package/build/run/index.js.map +1 -1
  64. package/build/utility/globals.js.map +1 -1
  65. package/build/utility/makeReq.js +4 -0
  66. package/build/utility/makeReq.js.map +1 -1
  67. package/package.json +2 -2
@@ -0,0 +1,274 @@
1
+ import _traverse from "@babel/traverse";
2
+ import { getHttpMethodWithForm } from "./handleZDotCreate.js";
3
+ import { astNodeToJsonString } from "./astNodeToJsonString.js";
4
+ import * as fs from "fs";
5
+ import * as globals from "../../../utility/globals.js";
6
+ import chalk from "chalk";
7
+ import { findCrossChunkParameters } from "./findCrossChunkParams.js";
8
+ const traverse = _traverse.default;
9
+ /**
10
+ * Process exported functions that wrap axios HTTP methods.
11
+ * This function looks for patterns where exported functions call axios methods with endpoints.
12
+ *
13
+ * @param {string} axiosInstance - The variable name of the axios instance created with Z.create().
14
+ * @param {string} chunkCode - The code of the chunk.
15
+ * @param {string} directory - The directory of the chunk file.
16
+ * @param {string} chunkName - The name of the chunk.
17
+ * @param {Chunks} chunks - A dictionary of chunk names to chunk objects.
18
+ * @param {any} ast - The abstract syntax tree of the chunk.
19
+ */
20
+ export const processExportedEndpoints = (axiosInstance, chunkCode, directory, chunkName, chunks, ast) => {
21
+ // Variables to track exports and their corresponding function variables
22
+ const exportMap = {};
23
+ const axiosMethodVars = {};
24
+ let axiosMethodsFound = false;
25
+ // Step 1: Find the destructuring assignment for axios methods
26
+ // Example: let {request: s, get: o, post: a} = i
27
+ traverse(ast, {
28
+ VariableDeclarator(path) {
29
+ if (path.node.init &&
30
+ path.node.init.type === "Identifier" &&
31
+ path.node.init.name === axiosInstance &&
32
+ path.node.id.type === "ObjectPattern") {
33
+ // Found the destructuring of the axios instance
34
+ axiosMethodsFound = true;
35
+ for (const prop of path.node.id.properties) {
36
+ if (prop.type === "ObjectProperty" &&
37
+ prop.key.type === "Identifier" &&
38
+ prop.value.type === "Identifier") {
39
+ const methodName = prop.key.name; // e.g., "get", "post"
40
+ const varName = prop.value.name; // e.g., "o", "a"
41
+ // Store the mapping of variable names to HTTP methods
42
+ axiosMethodVars[varName] = methodName;
43
+ }
44
+ }
45
+ }
46
+ },
47
+ });
48
+ if (!axiosMethodsFound) {
49
+ return; // No axios method destructuring found
50
+ }
51
+ // Step 2: Find the exports and their corresponding variable names
52
+ // Example: n.d(t, { FX: function() { return l } })
53
+ traverse(ast, {
54
+ CallExpression(path) {
55
+ const callee = path.node.callee;
56
+ if (callee.type === "MemberExpression" &&
57
+ callee.object.type === "Identifier" &&
58
+ callee.property.type === "Identifier" &&
59
+ callee.property.name === "d" &&
60
+ path.node.arguments.length >= 2 &&
61
+ path.node.arguments[1].type === "ObjectExpression") {
62
+ // This is likely the n.d(t, {exports}) pattern
63
+ const exportsObj = path.node.arguments[1];
64
+ for (const prop of exportsObj.properties) {
65
+ if (prop.type === "ObjectProperty" &&
66
+ (prop.value.type === "FunctionExpression" || prop.value.type === "ArrowFunctionExpression")) {
67
+ // Get the export name
68
+ let exportName = "";
69
+ if (prop.key.type === "Identifier") {
70
+ exportName = prop.key.name;
71
+ }
72
+ else if (prop.key.type === "StringLiteral") {
73
+ exportName = prop.key.value;
74
+ }
75
+ // Find the return statement in the function body
76
+ if (prop.value.body && prop.value.body.type === "BlockStatement") {
77
+ for (const stmt of prop.value.body.body) {
78
+ if (stmt.type === "ReturnStatement" &&
79
+ stmt.argument &&
80
+ stmt.argument.type === "Identifier") {
81
+ // Map the export name to its returned variable
82
+ exportMap[exportName] = stmt.argument.name;
83
+ }
84
+ }
85
+ }
86
+ else if (prop.value.body && prop.value.body.type === "Identifier") {
87
+ // Arrow function with implicit return
88
+ exportMap[exportName] = prop.value.body.name;
89
+ }
90
+ }
91
+ }
92
+ }
93
+ },
94
+ });
95
+ // Step 3: Find the variable declarations for the exported functions
96
+ // Example: l = () => o("/something")
97
+ for (const exportKey in exportMap) {
98
+ const varName = exportMap[exportKey];
99
+ traverse(ast, {
100
+ AssignmentExpression(path) {
101
+ if (path.node.left.type === "Identifier" &&
102
+ path.node.left.name === varName &&
103
+ (path.node.right.type === "ArrowFunctionExpression" ||
104
+ path.node.right.type === "FunctionExpression")) {
105
+ const funcExpr = path.node.right;
106
+ let callExpr;
107
+ // Handle different function body types
108
+ if (funcExpr.body.type === "BlockStatement") {
109
+ // Function with block body, look for return statement
110
+ for (const stmt of funcExpr.body.body) {
111
+ if (stmt.type === "ReturnStatement" &&
112
+ stmt.argument &&
113
+ stmt.argument.type === "CallExpression") {
114
+ callExpr = stmt.argument;
115
+ break;
116
+ }
117
+ }
118
+ }
119
+ else if (funcExpr.body.type === "CallExpression") {
120
+ // Arrow function with implicit return
121
+ callExpr = funcExpr.body;
122
+ }
123
+ if (callExpr && callExpr.callee.type === "Identifier" && axiosMethodVars[callExpr.callee.name]) {
124
+ // Found an axios method call, extract endpoint details
125
+ const axiosMethodVar = callExpr.callee.name;
126
+ const axiosMethod = axiosMethodVars[axiosMethodVar];
127
+ const httpMethod = getHttpMethodWithForm(axiosMethod);
128
+ if (!httpMethod) {
129
+ return; // Skip if HTTP method is not recognized
130
+ }
131
+ let endpoint = "";
132
+ let params = "";
133
+ // Extract the URL/endpoint
134
+ if (callExpr.arguments.length > 0) {
135
+ if (callExpr.arguments[0].type === "StringLiteral") {
136
+ endpoint = callExpr.arguments[0].value;
137
+ }
138
+ else {
139
+ endpoint = astNodeToJsonString(callExpr.arguments[0], chunkCode);
140
+ }
141
+ }
142
+ // Extract parameters/body if present
143
+ if (callExpr.arguments.length > 1) {
144
+ params = astNodeToJsonString(callExpr.arguments[1], chunkCode);
145
+ }
146
+ // Find line number in source file
147
+ const functionFile = `${directory}/${chunks[chunkName].file}`;
148
+ const codeFileContent = fs.readFileSync(functionFile, "utf-8");
149
+ let functionFileLine = -1;
150
+ // Extract the code snippet for this arrow function
151
+ const arrowFuncSnippet = chunkCode.substring(path.node.start, path.node.end);
152
+ // Look for this snippet in the file
153
+ const lines = codeFileContent.split("\n");
154
+ for (let i = 0; i < lines.length; i++) {
155
+ if (lines[i].includes(arrowFuncSnippet.trim().substring(0, Math.min(arrowFuncSnippet.length, 30)))) {
156
+ functionFileLine = i + 1;
157
+ break;
158
+ }
159
+ }
160
+ // Log the found exported endpoint
161
+ console.log(chalk.cyan(`[+] Found exported endpoint '${exportKey}' in chunk ${chunkName} ("${functionFile}":${functionFileLine})`));
162
+ console.log(chalk.yellow(` Export: ${exportKey} => ${varName}`));
163
+ console.log(chalk.green(` URL: ${endpoint}`));
164
+ console.log(chalk.green(` Method: ${httpMethod}`));
165
+ if (params) {
166
+ console.log(chalk.green(` Params/Body: ${params}`));
167
+ }
168
+ // Find cross-chunk parameters for this endpoint
169
+ const crossChunkParams = findCrossChunkParameters(chunkName, exportKey, chunks, directory);
170
+ // Add to the API collection
171
+ globals.addOpenapiOutput({
172
+ url: endpoint || "",
173
+ method: httpMethod || "",
174
+ path: endpoint || "",
175
+ headers: {}, // Headers would typically be set at the axios instance level
176
+ body: params || "",
177
+ chunkId: chunkName,
178
+ functionFile: functionFile,
179
+ functionFileLine: functionFileLine,
180
+ crossChunkParams: crossChunkParams,
181
+ });
182
+ }
183
+ }
184
+ },
185
+ VariableDeclarator(path) {
186
+ if (path.node.id.type === "Identifier" &&
187
+ path.node.id.name === varName &&
188
+ path.node.init &&
189
+ (path.node.init.type === "ArrowFunctionExpression" || path.node.init.type === "FunctionExpression")) {
190
+ const funcExpr = path.node.init;
191
+ let callExpr;
192
+ // Handle different function body types
193
+ if (funcExpr.body.type === "BlockStatement") {
194
+ // Function with block body, look for return statement
195
+ for (const stmt of funcExpr.body.body) {
196
+ if (stmt.type === "ReturnStatement" &&
197
+ stmt.argument &&
198
+ stmt.argument.type === "CallExpression") {
199
+ callExpr = stmt.argument;
200
+ break;
201
+ }
202
+ }
203
+ }
204
+ else if (funcExpr.body.type === "CallExpression") {
205
+ // Arrow function with implicit return
206
+ callExpr = funcExpr.body;
207
+ }
208
+ if (callExpr && callExpr.callee.type === "Identifier" && axiosMethodVars[callExpr.callee.name]) {
209
+ // Found an axios method call, extract endpoint details
210
+ const axiosMethodVar = callExpr.callee.name;
211
+ const axiosMethod = axiosMethodVars[axiosMethodVar];
212
+ const httpMethod = getHttpMethodWithForm(axiosMethod);
213
+ if (!httpMethod) {
214
+ return; // Skip if HTTP method is not recognized
215
+ }
216
+ let endpoint = "";
217
+ let params = "";
218
+ // Extract the URL/endpoint
219
+ if (callExpr.arguments.length > 0) {
220
+ if (callExpr.arguments[0].type === "StringLiteral") {
221
+ endpoint = callExpr.arguments[0].value;
222
+ }
223
+ else {
224
+ endpoint = astNodeToJsonString(callExpr.arguments[0], chunkCode);
225
+ }
226
+ }
227
+ // Extract parameters/body if present
228
+ if (callExpr.arguments.length > 1) {
229
+ params = astNodeToJsonString(callExpr.arguments[1], chunkCode);
230
+ }
231
+ // Find line number in source file
232
+ const functionFile = `${directory}/${chunks[chunkName].file}`;
233
+ const codeFileContent = fs.readFileSync(functionFile, "utf-8");
234
+ let functionFileLine = -1;
235
+ // Extract the code snippet for this variable declaration
236
+ const varDeclSnippet = chunkCode.substring(path.node.start, path.node.end);
237
+ // Look for this snippet in the file
238
+ const lines = codeFileContent.split("\n");
239
+ for (let i = 0; i < lines.length; i++) {
240
+ if (lines[i].includes(varDeclSnippet.trim().substring(0, Math.min(varDeclSnippet.length, 30)))) {
241
+ functionFileLine = i + 1;
242
+ break;
243
+ }
244
+ }
245
+ // Log the found exported endpoint
246
+ console.log(chalk.cyan(`[+] Found exported endpoint '${exportKey}' in chunk ${chunkName} ("${functionFile}":${functionFileLine})`));
247
+ console.log(chalk.yellow(` Export: ${exportKey} => ${varName}`));
248
+ console.log(chalk.green(` URL: ${endpoint}`));
249
+ console.log(chalk.green(` Method: ${httpMethod}`));
250
+ if (params) {
251
+ console.log(chalk.green(` Params/Body: ${params}`));
252
+ }
253
+ // Find cross-chunk parameters for this endpoint
254
+ const crossChunkParams = findCrossChunkParameters(chunkName, exportKey, chunks, directory);
255
+ // Add to the API collection
256
+ globals.addOpenapiOutput({
257
+ url: endpoint || "",
258
+ method: httpMethod || "",
259
+ path: endpoint || "",
260
+ headers: {}, // Headers would typically be set at the axios instance level
261
+ body: params || "",
262
+ chunkId: chunkName,
263
+ functionFile: functionFile,
264
+ functionFileLine: functionFileLine,
265
+ crossChunkParams: crossChunkParams,
266
+ });
267
+ }
268
+ }
269
+ },
270
+ });
271
+ }
272
+ };
273
+ export default processExportedEndpoints;
274
+ //# sourceMappingURL=processExportedEndpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processExportedEndpoints.js","sourceRoot":"","sources":["../../../../src/map/next_js/resolveAxiosHelpers/processExportedEndpoints.ts"],"names":[],"mappings":"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"}