@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.
Files changed (233) hide show
  1. package/.github/workflows/build-and-prettify.yaml +207 -14
  2. package/.github/workflows/pr_checker.yml +2 -2
  3. package/.github/workflows/promote-js-recon.yml +104 -0
  4. package/.github/workflows/publish-js-recon.yml +22 -80
  5. package/.github/workflows/rules-smoke-test.yaml +79 -0
  6. package/CHANGELOG.md +177 -4
  7. package/CLAUDE.md +350 -16
  8. package/Dockerfile.release +29 -0
  9. package/README.md +48 -19
  10. package/build/analyze/engine/csMastSEngine.js +129 -0
  11. package/build/analyze/engine/csMastSEngine.js.map +1 -0
  12. package/build/analyze/engine/index.js +15 -0
  13. package/build/analyze/engine/index.js.map +1 -1
  14. package/build/analyze/helpers/engineHelpers/findDirectAssignment.js +2 -1
  15. package/build/analyze/helpers/engineHelpers/findDirectAssignment.js.map +1 -1
  16. package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js +2 -1
  17. package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js.map +1 -1
  18. package/build/analyze/helpers/engineHelpers/resolveFunctionIdentifier.js +2 -1
  19. package/build/analyze/helpers/engineHelpers/resolveFunctionIdentifier.js.map +1 -1
  20. package/build/analyze/helpers/engineHelpers/taintFlow.js +11 -2
  21. package/build/analyze/helpers/engineHelpers/taintFlow.js.map +1 -1
  22. package/build/analyze/helpers/initRules.js.map +1 -1
  23. package/build/analyze/helpers/schemas.js +6 -2
  24. package/build/analyze/helpers/schemas.js.map +1 -1
  25. package/build/analyze/helpers/validate.js +3 -3
  26. package/build/analyze/helpers/validate.js.map +1 -1
  27. package/build/analyze/index.js +1 -0
  28. package/build/analyze/index.js.map +1 -1
  29. package/build/completion/index.js +432 -0
  30. package/build/completion/index.js.map +1 -0
  31. package/build/cs_mast/index.js +213 -0
  32. package/build/cs_mast/index.js.map +1 -0
  33. package/build/endpoints/next_js/client_jsFilesHref.js +2 -1
  34. package/build/endpoints/next_js/client_jsFilesHref.js.map +1 -1
  35. package/build/endpoints/next_js/client_jsonParse.js +2 -1
  36. package/build/endpoints/next_js/client_jsonParse.js.map +1 -1
  37. package/build/endpoints/next_js/client_mappedJsonFile.js +2 -1
  38. package/build/endpoints/next_js/client_mappedJsonFile.js.map +1 -1
  39. package/build/endpoints/next_js/client_subsequentRequests.js +2 -1
  40. package/build/endpoints/next_js/client_subsequentRequests.js.map +1 -1
  41. package/build/fingerprint/index.js +56 -33
  42. package/build/fingerprint/index.js.map +1 -1
  43. package/build/globalConfig.js +3 -3
  44. package/build/globalConfig.js.map +1 -1
  45. package/build/index.js +210 -10
  46. package/build/index.js.map +1 -1
  47. package/build/lazyLoad/angular/angular_getFromMainJs.js +2 -1
  48. package/build/lazyLoad/angular/angular_getFromMainJs.js.map +1 -1
  49. package/build/lazyLoad/downloadFilesUtil.js +6 -5
  50. package/build/lazyLoad/downloadFilesUtil.js.map +1 -1
  51. package/build/lazyLoad/downloadLoadedJsUtil.js +59 -5
  52. package/build/lazyLoad/downloadLoadedJsUtil.js.map +1 -1
  53. package/build/lazyLoad/downloadQueue.js +10 -9
  54. package/build/lazyLoad/downloadQueue.js.map +1 -1
  55. package/build/lazyLoad/index.js +127 -85
  56. package/build/lazyLoad/index.js.map +1 -1
  57. package/build/lazyLoad/methodFilter.js +50 -0
  58. package/build/lazyLoad/methodFilter.js.map +1 -0
  59. package/build/lazyLoad/next_js/NextJsCrawler.js +69 -48
  60. package/build/lazyLoad/next_js/NextJsCrawler.js.map +1 -1
  61. package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js +36 -34
  62. package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js.map +1 -1
  63. package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js +66 -13
  64. package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js.map +1 -1
  65. package/build/lazyLoad/next_js/next_parseLayoutJs.js +80 -68
  66. package/build/lazyLoad/next_js/next_parseLayoutJs.js.map +1 -1
  67. package/build/lazyLoad/next_js/next_promiseResolve.js +22 -16
  68. package/build/lazyLoad/next_js/next_promiseResolve.js.map +1 -1
  69. package/build/lazyLoad/nuxt_js/nuxt_astParse.js +49 -47
  70. package/build/lazyLoad/nuxt_js/nuxt_astParse.js.map +1 -1
  71. package/build/lazyLoad/nuxt_js/nuxt_getBuildsManifest.js +64 -0
  72. package/build/lazyLoad/nuxt_js/nuxt_getBuildsManifest.js.map +1 -0
  73. package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js +3 -1
  74. package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js.map +1 -1
  75. package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js +3 -2
  76. package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js.map +1 -1
  77. package/build/lazyLoad/react/react_followImports.js +16 -7
  78. package/build/lazyLoad/react/react_followImports.js.map +1 -1
  79. package/build/lazyLoad/react/react_webpackChunkPaths.js +175 -123
  80. package/build/lazyLoad/react/react_webpackChunkPaths.js.map +1 -1
  81. package/build/lazyLoad/svelte/svelte_getFromPageSource.js +16 -0
  82. package/build/lazyLoad/svelte/svelte_getFromPageSource.js.map +1 -1
  83. package/build/lazyLoad/svelte/svelte_getVersionJson.js +40 -0
  84. package/build/lazyLoad/svelte/svelte_getVersionJson.js.map +1 -0
  85. package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js +3 -2
  86. package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js.map +1 -1
  87. package/build/lazyLoad/techDetect/checkAngularJS.js +27 -6
  88. package/build/lazyLoad/techDetect/checkAngularJS.js.map +1 -1
  89. package/build/lazyLoad/techDetect/checkNextJS.js +24 -15
  90. package/build/lazyLoad/techDetect/checkNextJS.js.map +1 -1
  91. package/build/lazyLoad/techDetect/checkReact.js +8 -0
  92. package/build/lazyLoad/techDetect/checkReact.js.map +1 -1
  93. package/build/lazyLoad/techDetect/checkSvelte.js +17 -0
  94. package/build/lazyLoad/techDetect/checkSvelte.js.map +1 -1
  95. package/build/lazyLoad/techDetect/index.js +33 -5
  96. package/build/lazyLoad/techDetect/index.js.map +1 -1
  97. package/build/lazyLoad/vue/vue_RuntimeJs.js +2 -1
  98. package/build/lazyLoad/vue/vue_RuntimeJs.js.map +1 -1
  99. package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js +2 -1
  100. package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js.map +1 -1
  101. package/build/lazyLoad/vue/vue_discoverJsFiles.js +59 -25
  102. package/build/lazyLoad/vue/vue_discoverJsFiles.js.map +1 -1
  103. package/build/lazyLoad/vue/vue_getClientSidePaths.js +2 -1
  104. package/build/lazyLoad/vue/vue_getClientSidePaths.js.map +1 -1
  105. package/build/lazyLoad/vue/vue_jsImports.js +2 -1
  106. package/build/lazyLoad/vue/vue_jsImports.js.map +1 -1
  107. package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js +2 -2
  108. package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js.map +1 -1
  109. package/build/lazyLoad/vue/vue_viteMapDeps.js +62 -54
  110. package/build/lazyLoad/vue/vue_viteMapDeps.js.map +1 -1
  111. package/build/map/angular_js/getAngularConnections.js +88 -0
  112. package/build/map/angular_js/getAngularConnections.js.map +1 -0
  113. package/build/map/angular_js/interactive.js +4 -0
  114. package/build/map/angular_js/interactive.js.map +1 -0
  115. package/build/map/graphql/resolveGraphql.js +2 -1
  116. package/build/map/graphql/resolveGraphql.js.map +1 -1
  117. package/build/map/index.js +38 -0
  118. package/build/map/index.js.map +1 -1
  119. package/build/map/next_js/getExports.js +2 -1
  120. package/build/map/next_js/getExports.js.map +1 -1
  121. package/build/map/next_js/getFetchInstances.js +2 -1
  122. package/build/map/next_js/getFetchInstances.js.map +1 -1
  123. package/build/map/next_js/getTurbopackConnections.js +2 -1
  124. package/build/map/next_js/getTurbopackConnections.js.map +1 -1
  125. package/build/map/next_js/getWebpackConnections.js +2 -1
  126. package/build/map/next_js/getWebpackConnections.js.map +1 -1
  127. package/build/map/next_js/resolveAxios.js +2 -1
  128. package/build/map/next_js/resolveAxios.js.map +1 -1
  129. package/build/map/next_js/resolveAxiosHelpers/directCallsWithoutAssignment.js +2 -1
  130. package/build/map/next_js/resolveAxiosHelpers/directCallsWithoutAssignment.js.map +1 -1
  131. package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js +2 -1
  132. package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js.map +1 -1
  133. package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js +2 -1
  134. package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js.map +1 -1
  135. package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js +2 -1
  136. package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js.map +1 -1
  137. package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js +2 -1
  138. package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js.map +1 -1
  139. package/build/map/next_js/resolveAxiosHelpers/interceptorHeaders.js +2 -1
  140. package/build/map/next_js/resolveAxiosHelpers/interceptorHeaders.js.map +1 -1
  141. package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js +2 -1
  142. package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js.map +1 -1
  143. package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js +2 -1
  144. package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js.map +1 -1
  145. package/build/map/next_js/resolveAxiosHelpers/traceBody.js +2 -1
  146. package/build/map/next_js/resolveAxiosHelpers/traceBody.js.map +1 -1
  147. package/build/map/next_js/resolveFetch.js +2 -1
  148. package/build/map/next_js/resolveFetch.js.map +1 -1
  149. package/build/map/next_js/resolveNewRequest.js +2 -1
  150. package/build/map/next_js/resolveNewRequest.js.map +1 -1
  151. package/build/map/next_js/resolveServerActions.js +2 -1
  152. package/build/map/next_js/resolveServerActions.js.map +1 -1
  153. package/build/map/next_js/utils.js +2 -1
  154. package/build/map/next_js/utils.js.map +1 -1
  155. package/build/map/react_js/getReactConnections.js +5 -4
  156. package/build/map/react_js/getReactConnections.js.map +1 -1
  157. package/build/map/vue_js/crossFileResolver.js +3 -2
  158. package/build/map/vue_js/crossFileResolver.js.map +1 -1
  159. package/build/map/vue_js/getViteConnections.js +5 -4
  160. package/build/map/vue_js/getViteConnections.js.map +1 -1
  161. package/build/map/vue_js/taint_utils.js +2 -1
  162. package/build/map/vue_js/taint_utils.js.map +1 -1
  163. package/build/map/vue_js/vue_resolveFetch.js +3 -2
  164. package/build/map/vue_js/vue_resolveFetch.js.map +1 -1
  165. package/build/map/vue_js/vue_resolveHttpClient.js +5 -3
  166. package/build/map/vue_js/vue_resolveHttpClient.js.map +1 -1
  167. package/build/map/vue_js/vue_resolveXhr.js +5 -3
  168. package/build/map/vue_js/vue_resolveXhr.js.map +1 -1
  169. package/build/mcp/cli.js.map +1 -1
  170. package/build/refactor/index.js +973 -27
  171. package/build/refactor/index.js.map +1 -1
  172. package/build/refactor/next/helpers.js +395 -0
  173. package/build/refactor/next/helpers.js.map +1 -0
  174. package/build/refactor/next/index.js +261 -71
  175. package/build/refactor/next/index.js.map +1 -1
  176. package/build/refactor/next/transform.js +1027 -0
  177. package/build/refactor/next/transform.js.map +1 -0
  178. package/build/refactor/next/validator.js +119 -0
  179. package/build/refactor/next/validator.js.map +1 -0
  180. package/build/refactor/react/helpers.js +106 -0
  181. package/build/refactor/react/helpers.js.map +1 -0
  182. package/build/refactor/react/index.js +290 -585
  183. package/build/refactor/react/index.js.map +1 -1
  184. package/build/refactor/react/library-classify.js +397 -0
  185. package/build/refactor/react/library-classify.js.map +1 -0
  186. package/build/refactor/react/transform.js +1852 -0
  187. package/build/refactor/react/transform.js.map +1 -0
  188. package/build/refactor/react/validator.js +123 -0
  189. package/build/refactor/react/validator.js.map +1 -0
  190. package/build/refactor/react-vite/index.js +652 -0
  191. package/build/refactor/react-vite/index.js.map +1 -0
  192. package/build/refactor/react-vite/vendor-analyze.js +336 -0
  193. package/build/refactor/react-vite/vendor-analyze.js.map +1 -0
  194. package/build/refactor/remote/cache.js +250 -0
  195. package/build/refactor/remote/cache.js.map +1 -0
  196. package/build/refactor/remote/config.js +63 -0
  197. package/build/refactor/remote/config.js.map +1 -0
  198. package/build/refactor/remote/hf-client.js +202 -0
  199. package/build/refactor/remote/hf-client.js.map +1 -0
  200. package/build/refactor/remote/version-detect.js +355 -0
  201. package/build/refactor/remote/version-detect.js.map +1 -0
  202. package/build/refactor/vue/index.js +176 -0
  203. package/build/refactor/vue/index.js.map +1 -0
  204. package/build/refactor/vue/vendor-analyze-vue.js +271 -0
  205. package/build/refactor/vue/vendor-analyze-vue.js.map +1 -0
  206. package/build/refactor/vue/vite.js +216 -0
  207. package/build/refactor/vue/vite.js.map +1 -0
  208. package/build/report/utility/genHtml.js +15 -4
  209. package/build/report/utility/genHtml.js.map +1 -1
  210. package/build/run/bundler-detect.js +154 -0
  211. package/build/run/bundler-detect.js.map +1 -0
  212. package/build/run/index.js +208 -16
  213. package/build/run/index.js.map +1 -1
  214. package/build/sourcemaps/index.js +89 -0
  215. package/build/sourcemaps/index.js.map +1 -0
  216. package/build/strings/index.js +6 -2
  217. package/build/strings/index.js.map +1 -1
  218. package/build/strings/trufflehog.js +71 -0
  219. package/build/strings/trufflehog.js.map +1 -0
  220. package/build/utility/banner.js +68 -0
  221. package/build/utility/banner.js.map +1 -0
  222. package/build/utility/getChromiumPath.js +40 -0
  223. package/build/utility/getChromiumPath.js.map +1 -0
  224. package/build/utility/globals.js +7 -0
  225. package/build/utility/globals.js.map +1 -1
  226. package/build/utility/makeReq.js +21 -11
  227. package/build/utility/makeReq.js.map +1 -1
  228. package/build/utility/postmanGenerator.js +2 -2
  229. package/build/utility/postmanGenerator.js.map +1 -1
  230. package/build/utility/puppeteerInstance.js +7 -1
  231. package/build/utility/puppeteerInstance.js.map +1 -1
  232. package/package.json +14 -8
  233. 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
- const traverse = _traverse.default;
16
- const generate = _generator.default;
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 to conform to the new Webpack 5 module system.
50
+ * Refactors a single Next.js (webpack) chunk into an ECMAScript module file.
19
51
  *
20
- * This function takes a code chunk and:
21
- * 1. Finds the third argument of the function declaration (if it exists)
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
- * @param chunk - The code chunk to refactor
27
- * @returns A promise that resolves with the refactored code string
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 refactorNext = (chunk) => __awaiter(void 0, void 0, void 0, function* () {
30
- console.log(chalk.cyan(`[i] Refactoring Next.js chunk: ${chunk.id}`));
31
- let codeCopy = chunk.code;
32
- // parse the code
33
- const ast = parser.parse(chunk.code, {
34
- sourceType: "unambiguous",
35
- plugins: ["jsx", "typescript"],
36
- errorRecovery: true,
37
- });
38
- // first of all, find the name of third argument of the function
39
- let thirdParamName;
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
- if (path.node.params.length < 3)
96
+ var _a;
97
+ if (captured)
43
98
  return;
44
- const thirdParam = path.node.params[2];
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
- thirdParamName = thirdParam.name;
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 (path.node.params.length < 3)
120
+ if (captured)
52
121
  return;
53
- const thirdParam = path.node.params[2];
54
- if (thirdParam.type !== "Identifier")
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
- thirdParamName = thirdParam.name;
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
- // if third argument is there, then process further
61
- if (thirdParamName) {
62
- // now, traverse through the code, and find the call expressions
63
- // it would be like thirdParamName(<some_number>)
64
- // Then replace it with `require("./<some_number>.js")`
65
- // then, write it in the codeCopy variable
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
- CallExpression(path) {
68
- if (t.isIdentifier(path.node.callee, {
69
- name: thirdParamName,
70
- }) &&
71
- path.node.arguments.length === 1 &&
72
- t.isNumericLiteral(path.node.arguments[0])) {
73
- const argument = path.node.arguments[0];
74
- const newRequire = t.callExpression(t.identifier("require"), [
75
- t.stringLiteral(`./${argument.value}.js`),
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
- codeCopy = generate(ast).code;
82
- }
83
- let functionName = null;
84
- traverse(ast, {
85
- FunctionDeclaration(path) {
86
- if (path.parent.type === "Program") {
87
- if (path.node.id) {
88
- functionName = path.node.id.name;
89
- path.stop();
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
- if (functionName) {
104
- codeCopy += `\n\nexport default ${functionName};`;
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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/refactor/next/index.ts"],"names":[],"mappings":"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"}