@js-recon/js-recon 1.3.2 → 1.4.1-alpha.10
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 +207 -14
- package/.github/workflows/pr_checker.yml +2 -2
- package/.github/workflows/promote-js-recon.yml +104 -0
- package/.github/workflows/publish-js-recon.yml +22 -80
- package/.github/workflows/rules-smoke-test.yaml +79 -0
- package/CHANGELOG.md +177 -4
- package/CLAUDE.md +350 -16
- package/Dockerfile.release +29 -0
- package/README.md +48 -19
- 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/initRules.js.map +1 -1
- package/build/analyze/helpers/schemas.js +6 -2
- 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/analyze/index.js +1 -0
- package/build/analyze/index.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 +213 -0
- package/build/cs_mast/index.js.map +1 -0
- 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 +3 -3
- package/build/globalConfig.js.map +1 -1
- package/build/index.js +210 -10
- 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 +59 -5
- package/build/lazyLoad/downloadLoadedJsUtil.js.map +1 -1
- package/build/lazyLoad/downloadQueue.js +10 -9
- package/build/lazyLoad/downloadQueue.js.map +1 -1
- package/build/lazyLoad/index.js +127 -85
- package/build/lazyLoad/index.js.map +1 -1
- package/build/lazyLoad/methodFilter.js +50 -0
- package/build/lazyLoad/methodFilter.js.map +1 -0
- package/build/lazyLoad/next_js/NextJsCrawler.js +69 -48
- package/build/lazyLoad/next_js/NextJsCrawler.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 +66 -13
- 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_getBuildsManifest.js +64 -0
- package/build/lazyLoad/nuxt_js/nuxt_getBuildsManifest.js.map +1 -0
- 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 +16 -7
- 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_getFromPageSource.js +16 -0
- package/build/lazyLoad/svelte/svelte_getFromPageSource.js.map +1 -1
- package/build/lazyLoad/svelte/svelte_getVersionJson.js +40 -0
- package/build/lazyLoad/svelte/svelte_getVersionJson.js.map +1 -0
- 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/checkNextJS.js +24 -15
- package/build/lazyLoad/techDetect/checkNextJS.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/checkSvelte.js +17 -0
- package/build/lazyLoad/techDetect/checkSvelte.js.map +1 -1
- package/build/lazyLoad/techDetect/index.js +33 -5
- 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 +59 -25
- 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_recursiveClientSidePathDownload.js +2 -2
- package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.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 +88 -0
- package/build/map/angular_js/getAngularConnections.js.map +1 -0
- package/build/map/angular_js/interactive.js +4 -0
- package/build/map/angular_js/interactive.js.map +1 -0
- package/build/map/graphql/resolveGraphql.js +2 -1
- package/build/map/graphql/resolveGraphql.js.map +1 -1
- package/build/map/index.js +38 -0
- package/build/map/index.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 +5 -3
- package/build/map/vue_js/vue_resolveHttpClient.js.map +1 -1
- package/build/map/vue_js/vue_resolveXhr.js +5 -3
- package/build/map/vue_js/vue_resolveXhr.js.map +1 -1
- package/build/mcp/cli.js.map +1 -1
- package/build/refactor/index.js +973 -27
- package/build/refactor/index.js.map +1 -1
- package/build/refactor/next/helpers.js +395 -0
- package/build/refactor/next/helpers.js.map +1 -0
- package/build/refactor/next/index.js +261 -71
- package/build/refactor/next/index.js.map +1 -1
- package/build/refactor/next/transform.js +1027 -0
- package/build/refactor/next/transform.js.map +1 -0
- package/build/refactor/next/validator.js +119 -0
- package/build/refactor/next/validator.js.map +1 -0
- package/build/refactor/react/helpers.js +106 -0
- package/build/refactor/react/helpers.js.map +1 -0
- package/build/refactor/react/index.js +290 -585
- package/build/refactor/react/index.js.map +1 -1
- package/build/refactor/react/library-classify.js +397 -0
- package/build/refactor/react/library-classify.js.map +1 -0
- package/build/refactor/react/transform.js +1852 -0
- package/build/refactor/react/transform.js.map +1 -0
- package/build/refactor/react/validator.js +123 -0
- package/build/refactor/react/validator.js.map +1 -0
- package/build/refactor/react-vite/index.js +652 -0
- package/build/refactor/react-vite/index.js.map +1 -0
- package/build/refactor/react-vite/vendor-analyze.js +336 -0
- package/build/refactor/react-vite/vendor-analyze.js.map +1 -0
- package/build/refactor/remote/cache.js +250 -0
- package/build/refactor/remote/cache.js.map +1 -0
- package/build/refactor/remote/config.js +63 -0
- package/build/refactor/remote/config.js.map +1 -0
- package/build/refactor/remote/hf-client.js +202 -0
- package/build/refactor/remote/hf-client.js.map +1 -0
- 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 +15 -4
- package/build/report/utility/genHtml.js.map +1 -1
- package/build/run/bundler-detect.js +154 -0
- package/build/run/bundler-detect.js.map +1 -0
- package/build/run/index.js +208 -16
- package/build/run/index.js.map +1 -1
- package/build/sourcemaps/index.js +89 -0
- package/build/sourcemaps/index.js.map +1 -0
- 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/banner.js +68 -0
- package/build/utility/banner.js.map +1 -0
- package/build/utility/getChromiumPath.js +40 -0
- package/build/utility/getChromiumPath.js.map +1 -0
- package/build/utility/globals.js +7 -0
- package/build/utility/globals.js.map +1 -1
- package/build/utility/makeReq.js +21 -11
- 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 +14 -8
- package/scripts/smoke-test.js +74 -0
|
@@ -7,103 +7,293 @@ 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";
|
|
13
14
|
import _generator from "@babel/generator";
|
|
14
15
|
import * as t from "@babel/types";
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
import { cs_mast_init } from "@shriyanss/cs-mast";
|
|
17
|
+
import { transformModule, transformWebpackModule } from "./transform.js";
|
|
18
|
+
import { validateAndFix } from "./validator.js";
|
|
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 Next.js chunk
|
|
50
|
+
* Refactors a single Next.js (webpack) chunk into an ECMAScript module file.
|
|
19
51
|
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* 2. Replaces all calls to the third argument with `require("./<some_number>.js")`
|
|
23
|
-
* 3. Finds the name of the exported function (if it exists)
|
|
24
|
-
* 4. Appends `export default <function_name>` to the code
|
|
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
|
|
25
54
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
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')
|
|
61
|
+
*
|
|
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)
|
|
28
66
|
*/
|
|
29
|
-
const
|
|
30
|
-
console.log(chalk.cyan(`[i]
|
|
31
|
-
let
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
+
}
|
|
81
|
+
let captured = null;
|
|
82
|
+
// A node is the genuine top-level module wrapper only if its nearest enclosing
|
|
83
|
+
// statement is a direct child of Program — this rejects arrow/function nodes
|
|
84
|
+
// nested anywhere inside another function body, even when their immediate
|
|
85
|
+
// parent happens to be an AssignmentExpression (e.g. an inner `n = () => {...}`).
|
|
86
|
+
const isGenuineTopLevel = (path) => {
|
|
87
|
+
var _a;
|
|
88
|
+
const statementParent = path.getStatementParent();
|
|
89
|
+
return !!((_a = statementParent === null || statementParent === void 0 ? void 0 : statementParent.parentPath) === null || _a === void 0 ? void 0 : _a.isProgram());
|
|
90
|
+
};
|
|
40
91
|
traverse(ast, {
|
|
92
|
+
// getWebpackConnections.ts synthesizes `function webpack_<chunk.id>(...)` whenever
|
|
93
|
+
// the original bundle module was itself a `function` expression (webpack 4/SWC
|
|
94
|
+
// output) — the dominant form on real-world bundles, not the arrow form below.
|
|
41
95
|
FunctionDeclaration(path) {
|
|
42
|
-
|
|
96
|
+
var _a;
|
|
97
|
+
if (captured)
|
|
43
98
|
return;
|
|
44
|
-
|
|
45
|
-
if (thirdParam.type !== "Identifier")
|
|
99
|
+
if (((_a = path.node.id) === null || _a === void 0 ? void 0 : _a.name) !== `webpack_${chunk.id}`)
|
|
46
100
|
return;
|
|
47
|
-
|
|
101
|
+
if (!isGenuineTopLevel(path))
|
|
102
|
+
return;
|
|
103
|
+
const params = path.node.params;
|
|
104
|
+
if (params.length > 3)
|
|
105
|
+
return;
|
|
106
|
+
const moduleParam = params[0] && t.isIdentifier(params[0]) ? params[0].name : "";
|
|
107
|
+
const exportsParam = params[1] && t.isIdentifier(params[1]) ? params[1].name : "";
|
|
108
|
+
const requireParam = params[2] && t.isIdentifier(params[2]) ? params[2].name : "";
|
|
109
|
+
captured = {
|
|
110
|
+
id: chunk.id,
|
|
111
|
+
fnPath: path,
|
|
112
|
+
runtimeParam: "",
|
|
113
|
+
moduleParam,
|
|
114
|
+
exportsParam,
|
|
115
|
+
requireParam,
|
|
116
|
+
};
|
|
48
117
|
path.stop();
|
|
49
118
|
},
|
|
50
119
|
ArrowFunctionExpression(path) {
|
|
51
|
-
if (
|
|
120
|
+
if (captured)
|
|
52
121
|
return;
|
|
53
|
-
|
|
54
|
-
|
|
122
|
+
// Accept the module wrapper at any of these positions:
|
|
123
|
+
// func_NNN = (e, t, r) => {...} → parent is AssignmentExpression
|
|
124
|
+
// (e, t, r) => {...} → parent is ExpressionStatement or Program
|
|
125
|
+
const parent = path.parentPath;
|
|
126
|
+
const isTopLevelShape = (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());
|
|
127
|
+
if (!isTopLevelShape || !isGenuineTopLevel(path))
|
|
55
128
|
return;
|
|
56
|
-
|
|
129
|
+
const params = path.node.params;
|
|
130
|
+
if (params.length > 3)
|
|
131
|
+
return;
|
|
132
|
+
const moduleParam = params[0] && t.isIdentifier(params[0]) ? params[0].name : "";
|
|
133
|
+
const exportsParam = params[1] && t.isIdentifier(params[1]) ? params[1].name : "";
|
|
134
|
+
const requireParam = params[2] && t.isIdentifier(params[2]) ? params[2].name : "";
|
|
135
|
+
captured = {
|
|
136
|
+
id: chunk.id,
|
|
137
|
+
fnPath: path,
|
|
138
|
+
runtimeParam: "",
|
|
139
|
+
moduleParam,
|
|
140
|
+
exportsParam,
|
|
141
|
+
requireParam,
|
|
142
|
+
};
|
|
57
143
|
path.stop();
|
|
58
144
|
},
|
|
59
145
|
});
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
146
|
+
if (!captured) {
|
|
147
|
+
console.log(chalk.yellow(`[!] No module function found in webpack chunk ${chunk.id} — skipping`));
|
|
148
|
+
return {};
|
|
149
|
+
}
|
|
150
|
+
// CS-MAST library classification: skip modules that match the cross-app baseline.
|
|
151
|
+
if (libSigs && libSigs.size > 0) {
|
|
152
|
+
const fnNode = captured.fnPath.node;
|
|
153
|
+
if (moduleIsLibrary(fnNode, libSigs, scatOverride)) {
|
|
154
|
+
console.log(chalk.gray(`[-] Module ${chunk.id} matches library baseline — skipping`));
|
|
155
|
+
return {};
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
const statements = transformWebpackModule(captured);
|
|
159
|
+
const code = validateAndFix(statements, chunk.id);
|
|
160
|
+
if (code === null) {
|
|
161
|
+
console.log(chalk.yellow(`[~] Module ${chunk.id} skipped due to unresolvable syntax errors`));
|
|
162
|
+
return {};
|
|
163
|
+
}
|
|
164
|
+
return { [chunk.id]: code };
|
|
165
|
+
});
|
|
166
|
+
const traverse = ((_b = _traverse.default) !== null && _b !== void 0 ? _b : _traverse);
|
|
167
|
+
/**
|
|
168
|
+
* Refactors a single Next.js (Turbopack) chunk into an ECMAScript module file.
|
|
169
|
+
*
|
|
170
|
+
* Supported module formats in a turbopack bundle:
|
|
171
|
+
*
|
|
172
|
+
* 1. Turbopack format: `func_NNN = (module, exports, require) => { ... }`
|
|
173
|
+
* - module (params[0]): module object — rarely used
|
|
174
|
+
* - exports (params[1]): exports target — ODP(exports,"name",{get:fn}) registers named exports;
|
|
175
|
+
* turbopack IIFE batch export !(fn)(exports, {name:getter,...}) also handled
|
|
176
|
+
* - require (params[2]): require function — require(N) imports module N; may be absent for 0/1/2-param modules
|
|
177
|
+
*
|
|
178
|
+
* 2. Webpack-style format: code is the module arrow function directly `(module, exports, require) => {...}`
|
|
179
|
+
* - Uses require.d(exports, {...}) for export registration
|
|
180
|
+
* - Uses require.r(exports) as ES module marker (dropped)
|
|
181
|
+
* - Same param order as turbopack
|
|
182
|
+
*
|
|
183
|
+
* Returns a map { [chunkId]: code } or {} if the chunk cannot be processed.
|
|
184
|
+
*/
|
|
185
|
+
const refactorNextTurbopack = (chunk) => __awaiter(void 0, void 0, void 0, function* () {
|
|
186
|
+
console.log(chalk.cyan(`[i] Processing Next.js (Turbopack) chunk: ${chunk.id}`));
|
|
187
|
+
const ast = parser.parse(chunk.code, {
|
|
188
|
+
sourceType: "unambiguous",
|
|
189
|
+
plugins: ["jsx", "typescript"],
|
|
190
|
+
errorRecovery: true,
|
|
191
|
+
});
|
|
192
|
+
// Detect format by looking at the code prefix.
|
|
193
|
+
// Turbopack chunks start with `func_NNN = ` (e.g. "func_170 = (e, t, r) => {...}").
|
|
194
|
+
// Webpack-style chunks are just the module function: "(e,t,r)=>{...}" or "e=>{...}".
|
|
195
|
+
const isTurbopackFormat = /^\s*func_\d+\s*=/.test(chunk.code);
|
|
196
|
+
if (isTurbopackFormat) {
|
|
197
|
+
return refactorTurbopackModule(chunk, ast);
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
return refactorWebpackModule(chunk, ast);
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
/**
|
|
204
|
+
* Handles `func_NNN = (module, exports, require) => { ... }` format.
|
|
205
|
+
* Looks for the top-level assignment and extracts the arrow function params.
|
|
206
|
+
*/
|
|
207
|
+
function refactorTurbopackModule(chunk, ast) {
|
|
208
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
209
|
+
let captured = null;
|
|
66
210
|
traverse(ast, {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
path.replaceWith(newRequire);
|
|
211
|
+
ArrowFunctionExpression(path) {
|
|
212
|
+
var _a, _b;
|
|
213
|
+
// Only capture direct assignments: `func_NNN = (e, t, r) => {...}`
|
|
214
|
+
if (!((_a = path.parentPath) === null || _a === void 0 ? void 0 : _a.isAssignmentExpression()) && !((_b = path.parentPath) === null || _b === void 0 ? void 0 : _b.isVariableDeclarator()))
|
|
215
|
+
return;
|
|
216
|
+
const params = path.node.params;
|
|
217
|
+
if (params.length > 3) {
|
|
218
|
+
console.log(chalk.yellow(`[!] Module ${chunk.id} has ${params.length} params — skipping`));
|
|
219
|
+
path.stop();
|
|
220
|
+
return;
|
|
78
221
|
}
|
|
222
|
+
// Turbopack: params[0]=runtime (e.r(N)), params[1]=module (t.exports), params[2]=exports (ODP target)
|
|
223
|
+
const runtimeParam = params[0] && t.isIdentifier(params[0]) ? params[0].name : "";
|
|
224
|
+
const moduleParam = params[1] && t.isIdentifier(params[1]) ? params[1].name : "";
|
|
225
|
+
const exportsParam = params[2] && t.isIdentifier(params[2]) ? params[2].name : "";
|
|
226
|
+
captured = {
|
|
227
|
+
id: chunk.id,
|
|
228
|
+
fnPath: path,
|
|
229
|
+
runtimeParam,
|
|
230
|
+
moduleParam,
|
|
231
|
+
exportsParam,
|
|
232
|
+
requireParam: "", // pure turbopack chunks have no webpack-style require
|
|
233
|
+
};
|
|
234
|
+
path.stop();
|
|
79
235
|
},
|
|
80
236
|
});
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
237
|
+
if (!captured) {
|
|
238
|
+
console.log(chalk.yellow(`[!] No module function found in chunk ${chunk.id} — skipping`));
|
|
239
|
+
return {};
|
|
240
|
+
}
|
|
241
|
+
const statements = transformModule(captured);
|
|
242
|
+
const code = validateAndFix(statements, chunk.id);
|
|
243
|
+
if (code === null) {
|
|
244
|
+
console.log(chalk.yellow(`[~] Module ${chunk.id} skipped due to unresolvable syntax errors`));
|
|
245
|
+
return {};
|
|
246
|
+
}
|
|
247
|
+
return { [chunk.id]: code };
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Handles webpack-style `(module, exports, require) => { ... }` format.
|
|
252
|
+
* The chunk code IS the module function itself (no func_NNN= prefix).
|
|
253
|
+
*/
|
|
254
|
+
function refactorWebpackModule(chunk, ast) {
|
|
255
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
256
|
+
let captured = null;
|
|
257
|
+
traverse(ast, {
|
|
258
|
+
ArrowFunctionExpression(path) {
|
|
259
|
+
var _a, _b;
|
|
260
|
+
// For webpack-style, the function may be at top level or inside an object property.
|
|
261
|
+
// Accept any top-level arrow function.
|
|
262
|
+
const params = path.node.params;
|
|
263
|
+
if (params.length > 3)
|
|
264
|
+
return;
|
|
265
|
+
// Skip deeply nested functions — only want the outermost module wrapper.
|
|
266
|
+
if ((_b = (_a = path.parentPath) === null || _a === void 0 ? void 0 : _a.parentPath) === null || _b === void 0 ? void 0 : _b.parentPath)
|
|
267
|
+
return;
|
|
268
|
+
// Webpack-style: params[0]=module, params[1]=exports (t), params[2]=require (r.d/r.r)
|
|
269
|
+
const moduleParam = params[0] && t.isIdentifier(params[0]) ? params[0].name : "";
|
|
270
|
+
const exportsParam = params[1] && t.isIdentifier(params[1]) ? params[1].name : "";
|
|
271
|
+
const requireParam = params[2] && t.isIdentifier(params[2]) ? params[2].name : "";
|
|
272
|
+
if (!captured) {
|
|
273
|
+
captured = {
|
|
274
|
+
id: chunk.id,
|
|
275
|
+
fnPath: path,
|
|
276
|
+
runtimeParam: "", // webpack-style has no turbopack runtime
|
|
277
|
+
moduleParam,
|
|
278
|
+
exportsParam,
|
|
279
|
+
requireParam,
|
|
280
|
+
};
|
|
90
281
|
}
|
|
91
|
-
}
|
|
92
|
-
},
|
|
93
|
-
VariableDeclarator(path) {
|
|
94
|
-
if (path.parentPath.parent.type === "Program" &&
|
|
95
|
-
path.node.init &&
|
|
96
|
-
path.node.init.type === "ArrowFunctionExpression" &&
|
|
97
|
-
path.node.id.type === "Identifier") {
|
|
98
|
-
functionName = path.node.id.name;
|
|
99
282
|
path.stop();
|
|
100
|
-
}
|
|
101
|
-
}
|
|
283
|
+
},
|
|
284
|
+
});
|
|
285
|
+
if (!captured) {
|
|
286
|
+
console.log(chalk.yellow(`[!] No module function found in webpack chunk ${chunk.id} — skipping`));
|
|
287
|
+
return {};
|
|
288
|
+
}
|
|
289
|
+
const statements = transformWebpackModule(captured);
|
|
290
|
+
const code = validateAndFix(statements, chunk.id);
|
|
291
|
+
if (code === null) {
|
|
292
|
+
console.log(chalk.yellow(`[~] Module ${chunk.id} skipped due to unresolvable syntax errors`));
|
|
293
|
+
return {};
|
|
294
|
+
}
|
|
295
|
+
return { [chunk.id]: code };
|
|
102
296
|
});
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
106
|
-
return codeCopy;
|
|
107
|
-
});
|
|
108
|
-
export default refactorNext;
|
|
297
|
+
}
|
|
298
|
+
export default refactorNextTurbopack;
|
|
109
299
|
//# 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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"}
|