@shriyanss/js-recon 1.4.1-alpha.4 → 1.4.1-alpha.6
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 +187 -1
- package/.github/workflows/promote-js-recon.yml +116 -0
- package/.github/workflows/publish-js-recon.yml +7 -114
- package/.github/workflows/rules-smoke-test.yaml +79 -0
- package/CHANGELOG.md +46 -0
- package/CLAUDE.md +208 -14
- package/Dockerfile.release +29 -0
- package/README.md +18 -17
- package/build/analyze/engine/csMastSEngine.js +129 -0
- package/build/analyze/engine/csMastSEngine.js.map +1 -0
- package/build/analyze/engine/index.js +15 -0
- package/build/analyze/engine/index.js.map +1 -1
- package/build/analyze/helpers/engineHelpers/findDirectAssignment.js +2 -1
- package/build/analyze/helpers/engineHelpers/findDirectAssignment.js.map +1 -1
- package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js +2 -1
- package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js.map +1 -1
- package/build/analyze/helpers/engineHelpers/resolveFunctionIdentifier.js +2 -1
- package/build/analyze/helpers/engineHelpers/resolveFunctionIdentifier.js.map +1 -1
- package/build/analyze/helpers/engineHelpers/taintFlow.js +11 -2
- package/build/analyze/helpers/engineHelpers/taintFlow.js.map +1 -1
- package/build/analyze/helpers/schemas.js +5 -1
- package/build/analyze/helpers/schemas.js.map +1 -1
- package/build/analyze/helpers/validate.js +3 -3
- package/build/analyze/helpers/validate.js.map +1 -1
- package/build/completion/index.js +432 -0
- package/build/completion/index.js.map +1 -0
- package/build/cs_mast/index.js +94 -3
- package/build/cs_mast/index.js.map +1 -1
- package/build/endpoints/next_js/client_jsFilesHref.js +2 -1
- package/build/endpoints/next_js/client_jsFilesHref.js.map +1 -1
- package/build/endpoints/next_js/client_jsonParse.js +2 -1
- package/build/endpoints/next_js/client_jsonParse.js.map +1 -1
- package/build/endpoints/next_js/client_mappedJsonFile.js +2 -1
- package/build/endpoints/next_js/client_mappedJsonFile.js.map +1 -1
- package/build/endpoints/next_js/client_subsequentRequests.js +2 -1
- package/build/endpoints/next_js/client_subsequentRequests.js.map +1 -1
- package/build/fingerprint/index.js +56 -33
- package/build/fingerprint/index.js.map +1 -1
- package/build/globalConfig.js +1 -1
- package/build/index.js +67 -6
- package/build/index.js.map +1 -1
- package/build/lazyLoad/angular/angular_getFromMainJs.js +2 -1
- package/build/lazyLoad/angular/angular_getFromMainJs.js.map +1 -1
- package/build/lazyLoad/downloadFilesUtil.js +6 -5
- package/build/lazyLoad/downloadFilesUtil.js.map +1 -1
- package/build/lazyLoad/downloadLoadedJsUtil.js +56 -7
- package/build/lazyLoad/downloadLoadedJsUtil.js.map +1 -1
- package/build/lazyLoad/downloadQueue.js +9 -8
- package/build/lazyLoad/downloadQueue.js.map +1 -1
- package/build/lazyLoad/index.js +28 -1
- package/build/lazyLoad/index.js.map +1 -1
- package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js +36 -34
- package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js.map +1 -1
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js +63 -15
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js.map +1 -1
- package/build/lazyLoad/next_js/next_parseLayoutJs.js +80 -68
- package/build/lazyLoad/next_js/next_parseLayoutJs.js.map +1 -1
- package/build/lazyLoad/next_js/next_promiseResolve.js +22 -16
- package/build/lazyLoad/next_js/next_promiseResolve.js.map +1 -1
- package/build/lazyLoad/nuxt_js/nuxt_astParse.js +49 -47
- package/build/lazyLoad/nuxt_js/nuxt_astParse.js.map +1 -1
- package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js +3 -1
- package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js.map +1 -1
- package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js +3 -2
- package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js.map +1 -1
- package/build/lazyLoad/react/react_followImports.js +12 -9
- package/build/lazyLoad/react/react_followImports.js.map +1 -1
- package/build/lazyLoad/react/react_webpackChunkPaths.js +175 -123
- package/build/lazyLoad/react/react_webpackChunkPaths.js.map +1 -1
- package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js +3 -2
- package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js.map +1 -1
- package/build/lazyLoad/techDetect/checkAngularJS.js +27 -6
- package/build/lazyLoad/techDetect/checkAngularJS.js.map +1 -1
- package/build/lazyLoad/techDetect/checkReact.js +8 -0
- package/build/lazyLoad/techDetect/checkReact.js.map +1 -1
- package/build/lazyLoad/techDetect/index.js +23 -2
- package/build/lazyLoad/techDetect/index.js.map +1 -1
- package/build/lazyLoad/vue/vue_RuntimeJs.js +2 -1
- package/build/lazyLoad/vue/vue_RuntimeJs.js.map +1 -1
- package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js +2 -1
- package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js.map +1 -1
- package/build/lazyLoad/vue/vue_discoverJsFiles.js +22 -10
- package/build/lazyLoad/vue/vue_discoverJsFiles.js.map +1 -1
- package/build/lazyLoad/vue/vue_getClientSidePaths.js +2 -1
- package/build/lazyLoad/vue/vue_getClientSidePaths.js.map +1 -1
- package/build/lazyLoad/vue/vue_jsImports.js +2 -1
- package/build/lazyLoad/vue/vue_jsImports.js.map +1 -1
- package/build/lazyLoad/vue/vue_viteMapDeps.js +62 -54
- package/build/lazyLoad/vue/vue_viteMapDeps.js.map +1 -1
- package/build/map/angular_js/getAngularConnections.js +1 -1
- package/build/map/angular_js/getAngularConnections.js.map +1 -1
- package/build/map/graphql/resolveGraphql.js +2 -1
- package/build/map/graphql/resolveGraphql.js.map +1 -1
- package/build/map/next_js/getExports.js +2 -1
- package/build/map/next_js/getExports.js.map +1 -1
- package/build/map/next_js/getFetchInstances.js +2 -1
- package/build/map/next_js/getFetchInstances.js.map +1 -1
- package/build/map/next_js/getTurbopackConnections.js +2 -1
- package/build/map/next_js/getTurbopackConnections.js.map +1 -1
- package/build/map/next_js/getWebpackConnections.js +2 -1
- package/build/map/next_js/getWebpackConnections.js.map +1 -1
- package/build/map/next_js/resolveAxios.js +2 -1
- package/build/map/next_js/resolveAxios.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/directCallsWithoutAssignment.js +2 -1
- package/build/map/next_js/resolveAxiosHelpers/directCallsWithoutAssignment.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js +2 -1
- package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js +2 -1
- package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js +2 -1
- package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js +2 -1
- package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/interceptorHeaders.js +2 -1
- package/build/map/next_js/resolveAxiosHelpers/interceptorHeaders.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js +2 -1
- package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js +2 -1
- package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/traceBody.js +2 -1
- package/build/map/next_js/resolveAxiosHelpers/traceBody.js.map +1 -1
- package/build/map/next_js/resolveFetch.js +2 -1
- package/build/map/next_js/resolveFetch.js.map +1 -1
- package/build/map/next_js/resolveNewRequest.js +2 -1
- package/build/map/next_js/resolveNewRequest.js.map +1 -1
- package/build/map/next_js/resolveServerActions.js +2 -1
- package/build/map/next_js/resolveServerActions.js.map +1 -1
- package/build/map/next_js/utils.js +2 -1
- package/build/map/next_js/utils.js.map +1 -1
- package/build/map/react_js/getReactConnections.js +5 -4
- package/build/map/react_js/getReactConnections.js.map +1 -1
- package/build/map/vue_js/crossFileResolver.js +3 -2
- package/build/map/vue_js/crossFileResolver.js.map +1 -1
- package/build/map/vue_js/getViteConnections.js +5 -4
- package/build/map/vue_js/getViteConnections.js.map +1 -1
- package/build/map/vue_js/taint_utils.js +2 -1
- package/build/map/vue_js/taint_utils.js.map +1 -1
- package/build/map/vue_js/vue_resolveFetch.js +3 -2
- package/build/map/vue_js/vue_resolveFetch.js.map +1 -1
- package/build/map/vue_js/vue_resolveHttpClient.js +3 -2
- package/build/map/vue_js/vue_resolveHttpClient.js.map +1 -1
- package/build/map/vue_js/vue_resolveXhr.js +3 -2
- package/build/map/vue_js/vue_resolveXhr.js.map +1 -1
- package/build/refactor/index.js +399 -60
- package/build/refactor/index.js.map +1 -1
- package/build/refactor/next/helpers.js +194 -13
- package/build/refactor/next/helpers.js.map +1 -1
- package/build/refactor/next/index.js +223 -36
- package/build/refactor/next/index.js.map +1 -1
- package/build/refactor/next/transform.js +905 -55
- package/build/refactor/next/transform.js.map +1 -1
- package/build/refactor/react/index.js +3 -3
- package/build/refactor/react/index.js.map +1 -1
- package/build/refactor/react/transform.js +2 -1
- package/build/refactor/react/transform.js.map +1 -1
- package/build/refactor/react/validator.js +2 -1
- package/build/refactor/react/validator.js.map +1 -1
- package/build/refactor/react-vite/index.js +39 -5
- package/build/refactor/react-vite/index.js.map +1 -1
- package/build/refactor/react-vite/vendor-analyze.js +3 -3
- package/build/refactor/react-vite/vendor-analyze.js.map +1 -1
- package/build/refactor/remote/config.js +17 -1
- package/build/refactor/remote/config.js.map +1 -1
- package/build/refactor/remote/hf-client.js +27 -2
- package/build/refactor/remote/hf-client.js.map +1 -1
- package/build/refactor/remote/version-detect.js +355 -0
- package/build/refactor/remote/version-detect.js.map +1 -0
- package/build/refactor/vue/index.js +176 -0
- package/build/refactor/vue/index.js.map +1 -0
- package/build/refactor/vue/vendor-analyze-vue.js +271 -0
- package/build/refactor/vue/vendor-analyze-vue.js.map +1 -0
- package/build/refactor/vue/vite.js +216 -0
- package/build/refactor/vue/vite.js.map +1 -0
- package/build/report/utility/genHtml.js +14 -3
- package/build/report/utility/genHtml.js.map +1 -1
- package/build/run/bundler-detect.js +140 -0
- package/build/run/bundler-detect.js.map +1 -0
- package/build/run/index.js +91 -5
- package/build/run/index.js.map +1 -1
- package/build/strings/index.js +6 -2
- package/build/strings/index.js.map +1 -1
- package/build/strings/trufflehog.js +71 -0
- package/build/strings/trufflehog.js.map +1 -0
- package/build/utility/makeReq.js +10 -9
- package/build/utility/makeReq.js.map +1 -1
- package/build/utility/postmanGenerator.js +2 -2
- package/build/utility/postmanGenerator.js.map +1 -1
- package/build/utility/puppeteerInstance.js +7 -1
- package/build/utility/puppeteerInstance.js.map +1 -1
- package/package.json +9 -5
- package/scripts/smoke-test.js +74 -0
|
@@ -7,64 +7,119 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
+
var _a, _b;
|
|
10
11
|
import chalk from "chalk";
|
|
11
12
|
import parser from "@babel/parser";
|
|
12
13
|
import _traverse from "@babel/traverse";
|
|
14
|
+
import _generator from "@babel/generator";
|
|
13
15
|
import * as t from "@babel/types";
|
|
14
|
-
import {
|
|
16
|
+
import { cs_mast_init } from "@shriyanss/cs-mast";
|
|
17
|
+
import { transformModule, transformWebpackModule } from "./transform.js";
|
|
15
18
|
import { validateAndFix } from "./validator.js";
|
|
16
|
-
const
|
|
19
|
+
const generate = (_a = _generator.default) !== null && _a !== void 0 ? _a : _generator;
|
|
20
|
+
// scat categories used when classifying modules as library vs application code.
|
|
21
|
+
const LIB_SIG_SCAT = ["lit", "decl", "loop", "cond"];
|
|
22
|
+
// Minimum fraction of a module's sub-tree signatures that must match the library
|
|
23
|
+
// baseline before the module is classified as library code.
|
|
24
|
+
const LIB_CLASSIFICATION_THRESHOLD = 0.51;
|
|
25
|
+
// Hash a module's function body and check whether its sub-tree signatures
|
|
26
|
+
// overlap the cross-app library baseline above the classification threshold.
|
|
27
|
+
const moduleIsLibrary = (fnNode, libSigs, scatOverride) => {
|
|
28
|
+
if (!t.isBlockStatement(fnNode.body))
|
|
29
|
+
return false;
|
|
30
|
+
try {
|
|
31
|
+
const code = generate(fnNode.body).code;
|
|
32
|
+
const tree = cs_mast_init(code, {
|
|
33
|
+
hash: "sha256",
|
|
34
|
+
scat: scatOverride !== null && scatOverride !== void 0 ? scatOverride : LIB_SIG_SCAT,
|
|
35
|
+
sinc: [],
|
|
36
|
+
lang: "js",
|
|
37
|
+
prsr: "@babel/parser",
|
|
38
|
+
});
|
|
39
|
+
const sigs = [...tree._signatureMap.keys()];
|
|
40
|
+
if (sigs.length === 0)
|
|
41
|
+
return false;
|
|
42
|
+
const matchCount = sigs.filter((sig) => libSigs.has(sig)).length;
|
|
43
|
+
return matchCount / sigs.length >= LIB_CLASSIFICATION_THRESHOLD;
|
|
44
|
+
}
|
|
45
|
+
catch (_a) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
};
|
|
17
49
|
/**
|
|
18
|
-
* Refactors a single Next.js (
|
|
50
|
+
* Refactors a single Next.js (webpack) chunk into an ECMAScript module file.
|
|
19
51
|
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
52
|
+
* Chunk code format (from mapped.json): `3899:(e,t,r)=>{"use strict";...}`
|
|
53
|
+
* Param order: params[0]=module, params[1]=exports, params[2]=require
|
|
22
54
|
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* r
|
|
55
|
+
* Export forms handled:
|
|
56
|
+
* - Object.defineProperty(t,"name",{get:fn}) — named exports
|
|
57
|
+
* - for(var k in map) ODP(t,k,...) — for-in batch exports
|
|
58
|
+
* - r.d(t,{name:()=>local}) — webpack require.d (rare)
|
|
59
|
+
* - e.exports = VALUE — CJS default export
|
|
60
|
+
* - e.exports = r(N) — CJS re-export (→ export * from './N.js')
|
|
27
61
|
*
|
|
28
|
-
*
|
|
62
|
+
* Require forms handled:
|
|
63
|
+
* - var x = r(N) — hoisted to import * as x from './N.js'
|
|
64
|
+
* - r(N) inline — replaced with hoisted identifier
|
|
65
|
+
* - r(N); standalone — becomes import './N.js' (side-effect)
|
|
29
66
|
*/
|
|
30
|
-
const
|
|
31
|
-
console.log(chalk.cyan(`[i] Processing Next.js chunk: ${chunk.id}`));
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
67
|
+
export const refactorNextWebpack = (chunk, libSigs, scatOverride) => __awaiter(void 0, void 0, void 0, function* () {
|
|
68
|
+
console.log(chalk.cyan(`[i] Processing Next.js (webpack) chunk: ${chunk.id}`));
|
|
69
|
+
let ast;
|
|
70
|
+
try {
|
|
71
|
+
ast = parser.parse(chunk.code, {
|
|
72
|
+
sourceType: "unambiguous",
|
|
73
|
+
plugins: ["jsx", "typescript"],
|
|
74
|
+
errorRecovery: true,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
catch (_a) {
|
|
78
|
+
console.log(chalk.yellow(`[!] Failed to parse webpack chunk ${chunk.id} — skipping`));
|
|
79
|
+
return {};
|
|
80
|
+
}
|
|
37
81
|
let captured = null;
|
|
38
82
|
traverse(ast, {
|
|
39
83
|
ArrowFunctionExpression(path) {
|
|
40
|
-
|
|
41
|
-
//
|
|
42
|
-
|
|
84
|
+
// Accept the module wrapper at any of these positions:
|
|
85
|
+
// func_NNN = (e, t, r) => {...} → parent is AssignmentExpression
|
|
86
|
+
// (e, t, r) => {...} → parent is ExpressionStatement or Program
|
|
87
|
+
const parent = path.parentPath;
|
|
88
|
+
const isTopLevel = (parent === null || parent === void 0 ? void 0 : parent.isAssignmentExpression()) || (parent === null || parent === void 0 ? void 0 : parent.isExpressionStatement()) || (parent === null || parent === void 0 ? void 0 : parent.isProgram());
|
|
89
|
+
if (!isTopLevel)
|
|
43
90
|
return;
|
|
44
91
|
const params = path.node.params;
|
|
45
|
-
if (params.length > 3)
|
|
46
|
-
console.log(chalk.yellow(`[!] Module ${chunk.id} has ${params.length} params — not yet researched, skipping`));
|
|
47
|
-
path.stop();
|
|
92
|
+
if (params.length > 3)
|
|
48
93
|
return;
|
|
94
|
+
const moduleParam = params[0] && t.isIdentifier(params[0]) ? params[0].name : "";
|
|
95
|
+
const exportsParam = params[1] && t.isIdentifier(params[1]) ? params[1].name : "";
|
|
96
|
+
const requireParam = params[2] && t.isIdentifier(params[2]) ? params[2].name : "";
|
|
97
|
+
if (!captured) {
|
|
98
|
+
captured = {
|
|
99
|
+
id: chunk.id,
|
|
100
|
+
fnPath: path,
|
|
101
|
+
runtimeParam: "",
|
|
102
|
+
moduleParam,
|
|
103
|
+
exportsParam,
|
|
104
|
+
requireParam,
|
|
105
|
+
};
|
|
49
106
|
}
|
|
50
|
-
const runtimeParam = params[0] && t.isIdentifier(params[0]) ? params[0].name : "";
|
|
51
|
-
const moduleParam = params[1] && t.isIdentifier(params[1]) ? params[1].name : "";
|
|
52
|
-
const exportsParam = params[2] && t.isIdentifier(params[2]) ? params[2].name : "";
|
|
53
|
-
captured = {
|
|
54
|
-
id: chunk.id,
|
|
55
|
-
fnPath: path,
|
|
56
|
-
runtimeParam,
|
|
57
|
-
moduleParam,
|
|
58
|
-
exportsParam,
|
|
59
|
-
};
|
|
60
107
|
path.stop();
|
|
61
108
|
},
|
|
62
109
|
});
|
|
63
110
|
if (!captured) {
|
|
64
|
-
console.log(chalk.yellow(`[!] No module function found in chunk ${chunk.id} — skipping`));
|
|
111
|
+
console.log(chalk.yellow(`[!] No module function found in webpack chunk ${chunk.id} — skipping`));
|
|
65
112
|
return {};
|
|
66
113
|
}
|
|
67
|
-
|
|
114
|
+
// CS-MAST library classification: skip modules that match the cross-app baseline.
|
|
115
|
+
if (libSigs && libSigs.size > 0) {
|
|
116
|
+
const fnNode = captured.fnPath.node;
|
|
117
|
+
if (moduleIsLibrary(fnNode, libSigs, scatOverride)) {
|
|
118
|
+
console.log(chalk.gray(`[-] Module ${chunk.id} matches library baseline — skipping`));
|
|
119
|
+
return {};
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
const statements = transformWebpackModule(captured);
|
|
68
123
|
const code = validateAndFix(statements, chunk.id);
|
|
69
124
|
if (code === null) {
|
|
70
125
|
console.log(chalk.yellow(`[~] Module ${chunk.id} skipped due to unresolvable syntax errors`));
|
|
@@ -72,5 +127,137 @@ const refactorNext = (chunk) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
72
127
|
}
|
|
73
128
|
return { [chunk.id]: code };
|
|
74
129
|
});
|
|
75
|
-
|
|
130
|
+
const traverse = ((_b = _traverse.default) !== null && _b !== void 0 ? _b : _traverse);
|
|
131
|
+
/**
|
|
132
|
+
* Refactors a single Next.js (Turbopack) chunk into an ECMAScript module file.
|
|
133
|
+
*
|
|
134
|
+
* Supported module formats in a turbopack bundle:
|
|
135
|
+
*
|
|
136
|
+
* 1. Turbopack format: `func_NNN = (module, exports, require) => { ... }`
|
|
137
|
+
* - module (params[0]): module object — rarely used
|
|
138
|
+
* - exports (params[1]): exports target — ODP(exports,"name",{get:fn}) registers named exports;
|
|
139
|
+
* turbopack IIFE batch export !(fn)(exports, {name:getter,...}) also handled
|
|
140
|
+
* - require (params[2]): require function — require(N) imports module N; may be absent for 0/1/2-param modules
|
|
141
|
+
*
|
|
142
|
+
* 2. Webpack-style format: code is the module arrow function directly `(module, exports, require) => {...}`
|
|
143
|
+
* - Uses require.d(exports, {...}) for export registration
|
|
144
|
+
* - Uses require.r(exports) as ES module marker (dropped)
|
|
145
|
+
* - Same param order as turbopack
|
|
146
|
+
*
|
|
147
|
+
* Returns a map { [chunkId]: code } or {} if the chunk cannot be processed.
|
|
148
|
+
*/
|
|
149
|
+
const refactorNextTurbopack = (chunk) => __awaiter(void 0, void 0, void 0, function* () {
|
|
150
|
+
console.log(chalk.cyan(`[i] Processing Next.js (Turbopack) chunk: ${chunk.id}`));
|
|
151
|
+
const ast = parser.parse(chunk.code, {
|
|
152
|
+
sourceType: "unambiguous",
|
|
153
|
+
plugins: ["jsx", "typescript"],
|
|
154
|
+
errorRecovery: true,
|
|
155
|
+
});
|
|
156
|
+
// Detect format by looking at the code prefix.
|
|
157
|
+
// Turbopack chunks start with `func_NNN = ` (e.g. "func_170 = (e, t, r) => {...}").
|
|
158
|
+
// Webpack-style chunks are just the module function: "(e,t,r)=>{...}" or "e=>{...}".
|
|
159
|
+
const isTurbopackFormat = /^\s*func_\d+\s*=/.test(chunk.code);
|
|
160
|
+
if (isTurbopackFormat) {
|
|
161
|
+
return refactorTurbopackModule(chunk, ast);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
return refactorWebpackModule(chunk, ast);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
/**
|
|
168
|
+
* Handles `func_NNN = (module, exports, require) => { ... }` format.
|
|
169
|
+
* Looks for the top-level assignment and extracts the arrow function params.
|
|
170
|
+
*/
|
|
171
|
+
function refactorTurbopackModule(chunk, ast) {
|
|
172
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
173
|
+
let captured = null;
|
|
174
|
+
traverse(ast, {
|
|
175
|
+
ArrowFunctionExpression(path) {
|
|
176
|
+
var _a, _b;
|
|
177
|
+
// Only capture direct assignments: `func_NNN = (e, t, r) => {...}`
|
|
178
|
+
if (!((_a = path.parentPath) === null || _a === void 0 ? void 0 : _a.isAssignmentExpression()) && !((_b = path.parentPath) === null || _b === void 0 ? void 0 : _b.isVariableDeclarator()))
|
|
179
|
+
return;
|
|
180
|
+
const params = path.node.params;
|
|
181
|
+
if (params.length > 3) {
|
|
182
|
+
console.log(chalk.yellow(`[!] Module ${chunk.id} has ${params.length} params — skipping`));
|
|
183
|
+
path.stop();
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
// Turbopack: params[0]=runtime (e.r(N)), params[1]=module (t.exports), params[2]=exports (ODP target)
|
|
187
|
+
const runtimeParam = params[0] && t.isIdentifier(params[0]) ? params[0].name : "";
|
|
188
|
+
const moduleParam = params[1] && t.isIdentifier(params[1]) ? params[1].name : "";
|
|
189
|
+
const exportsParam = params[2] && t.isIdentifier(params[2]) ? params[2].name : "";
|
|
190
|
+
captured = {
|
|
191
|
+
id: chunk.id,
|
|
192
|
+
fnPath: path,
|
|
193
|
+
runtimeParam,
|
|
194
|
+
moduleParam,
|
|
195
|
+
exportsParam,
|
|
196
|
+
requireParam: "", // pure turbopack chunks have no webpack-style require
|
|
197
|
+
};
|
|
198
|
+
path.stop();
|
|
199
|
+
},
|
|
200
|
+
});
|
|
201
|
+
if (!captured) {
|
|
202
|
+
console.log(chalk.yellow(`[!] No module function found in chunk ${chunk.id} — skipping`));
|
|
203
|
+
return {};
|
|
204
|
+
}
|
|
205
|
+
const statements = transformModule(captured);
|
|
206
|
+
const code = validateAndFix(statements, chunk.id);
|
|
207
|
+
if (code === null) {
|
|
208
|
+
console.log(chalk.yellow(`[~] Module ${chunk.id} skipped due to unresolvable syntax errors`));
|
|
209
|
+
return {};
|
|
210
|
+
}
|
|
211
|
+
return { [chunk.id]: code };
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Handles webpack-style `(module, exports, require) => { ... }` format.
|
|
216
|
+
* The chunk code IS the module function itself (no func_NNN= prefix).
|
|
217
|
+
*/
|
|
218
|
+
function refactorWebpackModule(chunk, ast) {
|
|
219
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
220
|
+
let captured = null;
|
|
221
|
+
traverse(ast, {
|
|
222
|
+
ArrowFunctionExpression(path) {
|
|
223
|
+
var _a, _b;
|
|
224
|
+
// For webpack-style, the function may be at top level or inside an object property.
|
|
225
|
+
// Accept any top-level arrow function.
|
|
226
|
+
const params = path.node.params;
|
|
227
|
+
if (params.length > 3)
|
|
228
|
+
return;
|
|
229
|
+
// Skip deeply nested functions — only want the outermost module wrapper.
|
|
230
|
+
if ((_b = (_a = path.parentPath) === null || _a === void 0 ? void 0 : _a.parentPath) === null || _b === void 0 ? void 0 : _b.parentPath)
|
|
231
|
+
return;
|
|
232
|
+
// Webpack-style: params[0]=module, params[1]=exports (t), params[2]=require (r.d/r.r)
|
|
233
|
+
const moduleParam = params[0] && t.isIdentifier(params[0]) ? params[0].name : "";
|
|
234
|
+
const exportsParam = params[1] && t.isIdentifier(params[1]) ? params[1].name : "";
|
|
235
|
+
const requireParam = params[2] && t.isIdentifier(params[2]) ? params[2].name : "";
|
|
236
|
+
if (!captured) {
|
|
237
|
+
captured = {
|
|
238
|
+
id: chunk.id,
|
|
239
|
+
fnPath: path,
|
|
240
|
+
runtimeParam: "", // webpack-style has no turbopack runtime
|
|
241
|
+
moduleParam,
|
|
242
|
+
exportsParam,
|
|
243
|
+
requireParam,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
path.stop();
|
|
247
|
+
},
|
|
248
|
+
});
|
|
249
|
+
if (!captured) {
|
|
250
|
+
console.log(chalk.yellow(`[!] No module function found in webpack chunk ${chunk.id} — skipping`));
|
|
251
|
+
return {};
|
|
252
|
+
}
|
|
253
|
+
const statements = transformWebpackModule(captured);
|
|
254
|
+
const code = validateAndFix(statements, chunk.id);
|
|
255
|
+
if (code === null) {
|
|
256
|
+
console.log(chalk.yellow(`[~] Module ${chunk.id} skipped due to unresolvable syntax errors`));
|
|
257
|
+
return {};
|
|
258
|
+
}
|
|
259
|
+
return { [chunk.id]: code };
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
export default refactorNextTurbopack;
|
|
76
263
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/refactor/next/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/refactor/next/index.ts"],"names":[],"mappings":"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"}
|