@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.
Files changed (191) hide show
  1. package/.github/workflows/build-and-prettify.yaml +187 -1
  2. package/.github/workflows/promote-js-recon.yml +116 -0
  3. package/.github/workflows/publish-js-recon.yml +7 -114
  4. package/.github/workflows/rules-smoke-test.yaml +79 -0
  5. package/CHANGELOG.md +46 -0
  6. package/CLAUDE.md +208 -14
  7. package/Dockerfile.release +29 -0
  8. package/README.md +18 -17
  9. package/build/analyze/engine/csMastSEngine.js +129 -0
  10. package/build/analyze/engine/csMastSEngine.js.map +1 -0
  11. package/build/analyze/engine/index.js +15 -0
  12. package/build/analyze/engine/index.js.map +1 -1
  13. package/build/analyze/helpers/engineHelpers/findDirectAssignment.js +2 -1
  14. package/build/analyze/helpers/engineHelpers/findDirectAssignment.js.map +1 -1
  15. package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js +2 -1
  16. package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js.map +1 -1
  17. package/build/analyze/helpers/engineHelpers/resolveFunctionIdentifier.js +2 -1
  18. package/build/analyze/helpers/engineHelpers/resolveFunctionIdentifier.js.map +1 -1
  19. package/build/analyze/helpers/engineHelpers/taintFlow.js +11 -2
  20. package/build/analyze/helpers/engineHelpers/taintFlow.js.map +1 -1
  21. package/build/analyze/helpers/schemas.js +5 -1
  22. package/build/analyze/helpers/schemas.js.map +1 -1
  23. package/build/analyze/helpers/validate.js +3 -3
  24. package/build/analyze/helpers/validate.js.map +1 -1
  25. package/build/completion/index.js +432 -0
  26. package/build/completion/index.js.map +1 -0
  27. package/build/cs_mast/index.js +94 -3
  28. package/build/cs_mast/index.js.map +1 -1
  29. package/build/endpoints/next_js/client_jsFilesHref.js +2 -1
  30. package/build/endpoints/next_js/client_jsFilesHref.js.map +1 -1
  31. package/build/endpoints/next_js/client_jsonParse.js +2 -1
  32. package/build/endpoints/next_js/client_jsonParse.js.map +1 -1
  33. package/build/endpoints/next_js/client_mappedJsonFile.js +2 -1
  34. package/build/endpoints/next_js/client_mappedJsonFile.js.map +1 -1
  35. package/build/endpoints/next_js/client_subsequentRequests.js +2 -1
  36. package/build/endpoints/next_js/client_subsequentRequests.js.map +1 -1
  37. package/build/fingerprint/index.js +56 -33
  38. package/build/fingerprint/index.js.map +1 -1
  39. package/build/globalConfig.js +1 -1
  40. package/build/index.js +67 -6
  41. package/build/index.js.map +1 -1
  42. package/build/lazyLoad/angular/angular_getFromMainJs.js +2 -1
  43. package/build/lazyLoad/angular/angular_getFromMainJs.js.map +1 -1
  44. package/build/lazyLoad/downloadFilesUtil.js +6 -5
  45. package/build/lazyLoad/downloadFilesUtil.js.map +1 -1
  46. package/build/lazyLoad/downloadLoadedJsUtil.js +56 -7
  47. package/build/lazyLoad/downloadLoadedJsUtil.js.map +1 -1
  48. package/build/lazyLoad/downloadQueue.js +9 -8
  49. package/build/lazyLoad/downloadQueue.js.map +1 -1
  50. package/build/lazyLoad/index.js +28 -1
  51. package/build/lazyLoad/index.js.map +1 -1
  52. package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js +36 -34
  53. package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js.map +1 -1
  54. package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js +63 -15
  55. package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js.map +1 -1
  56. package/build/lazyLoad/next_js/next_parseLayoutJs.js +80 -68
  57. package/build/lazyLoad/next_js/next_parseLayoutJs.js.map +1 -1
  58. package/build/lazyLoad/next_js/next_promiseResolve.js +22 -16
  59. package/build/lazyLoad/next_js/next_promiseResolve.js.map +1 -1
  60. package/build/lazyLoad/nuxt_js/nuxt_astParse.js +49 -47
  61. package/build/lazyLoad/nuxt_js/nuxt_astParse.js.map +1 -1
  62. package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js +3 -1
  63. package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js.map +1 -1
  64. package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js +3 -2
  65. package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js.map +1 -1
  66. package/build/lazyLoad/react/react_followImports.js +12 -9
  67. package/build/lazyLoad/react/react_followImports.js.map +1 -1
  68. package/build/lazyLoad/react/react_webpackChunkPaths.js +175 -123
  69. package/build/lazyLoad/react/react_webpackChunkPaths.js.map +1 -1
  70. package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js +3 -2
  71. package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js.map +1 -1
  72. package/build/lazyLoad/techDetect/checkAngularJS.js +27 -6
  73. package/build/lazyLoad/techDetect/checkAngularJS.js.map +1 -1
  74. package/build/lazyLoad/techDetect/checkReact.js +8 -0
  75. package/build/lazyLoad/techDetect/checkReact.js.map +1 -1
  76. package/build/lazyLoad/techDetect/index.js +23 -2
  77. package/build/lazyLoad/techDetect/index.js.map +1 -1
  78. package/build/lazyLoad/vue/vue_RuntimeJs.js +2 -1
  79. package/build/lazyLoad/vue/vue_RuntimeJs.js.map +1 -1
  80. package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js +2 -1
  81. package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js.map +1 -1
  82. package/build/lazyLoad/vue/vue_discoverJsFiles.js +22 -10
  83. package/build/lazyLoad/vue/vue_discoverJsFiles.js.map +1 -1
  84. package/build/lazyLoad/vue/vue_getClientSidePaths.js +2 -1
  85. package/build/lazyLoad/vue/vue_getClientSidePaths.js.map +1 -1
  86. package/build/lazyLoad/vue/vue_jsImports.js +2 -1
  87. package/build/lazyLoad/vue/vue_jsImports.js.map +1 -1
  88. package/build/lazyLoad/vue/vue_viteMapDeps.js +62 -54
  89. package/build/lazyLoad/vue/vue_viteMapDeps.js.map +1 -1
  90. package/build/map/angular_js/getAngularConnections.js +1 -1
  91. package/build/map/angular_js/getAngularConnections.js.map +1 -1
  92. package/build/map/graphql/resolveGraphql.js +2 -1
  93. package/build/map/graphql/resolveGraphql.js.map +1 -1
  94. package/build/map/next_js/getExports.js +2 -1
  95. package/build/map/next_js/getExports.js.map +1 -1
  96. package/build/map/next_js/getFetchInstances.js +2 -1
  97. package/build/map/next_js/getFetchInstances.js.map +1 -1
  98. package/build/map/next_js/getTurbopackConnections.js +2 -1
  99. package/build/map/next_js/getTurbopackConnections.js.map +1 -1
  100. package/build/map/next_js/getWebpackConnections.js +2 -1
  101. package/build/map/next_js/getWebpackConnections.js.map +1 -1
  102. package/build/map/next_js/resolveAxios.js +2 -1
  103. package/build/map/next_js/resolveAxios.js.map +1 -1
  104. package/build/map/next_js/resolveAxiosHelpers/directCallsWithoutAssignment.js +2 -1
  105. package/build/map/next_js/resolveAxiosHelpers/directCallsWithoutAssignment.js.map +1 -1
  106. package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js +2 -1
  107. package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js.map +1 -1
  108. package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js +2 -1
  109. package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js.map +1 -1
  110. package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js +2 -1
  111. package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js.map +1 -1
  112. package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js +2 -1
  113. package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js.map +1 -1
  114. package/build/map/next_js/resolveAxiosHelpers/interceptorHeaders.js +2 -1
  115. package/build/map/next_js/resolveAxiosHelpers/interceptorHeaders.js.map +1 -1
  116. package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js +2 -1
  117. package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js.map +1 -1
  118. package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js +2 -1
  119. package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js.map +1 -1
  120. package/build/map/next_js/resolveAxiosHelpers/traceBody.js +2 -1
  121. package/build/map/next_js/resolveAxiosHelpers/traceBody.js.map +1 -1
  122. package/build/map/next_js/resolveFetch.js +2 -1
  123. package/build/map/next_js/resolveFetch.js.map +1 -1
  124. package/build/map/next_js/resolveNewRequest.js +2 -1
  125. package/build/map/next_js/resolveNewRequest.js.map +1 -1
  126. package/build/map/next_js/resolveServerActions.js +2 -1
  127. package/build/map/next_js/resolveServerActions.js.map +1 -1
  128. package/build/map/next_js/utils.js +2 -1
  129. package/build/map/next_js/utils.js.map +1 -1
  130. package/build/map/react_js/getReactConnections.js +5 -4
  131. package/build/map/react_js/getReactConnections.js.map +1 -1
  132. package/build/map/vue_js/crossFileResolver.js +3 -2
  133. package/build/map/vue_js/crossFileResolver.js.map +1 -1
  134. package/build/map/vue_js/getViteConnections.js +5 -4
  135. package/build/map/vue_js/getViteConnections.js.map +1 -1
  136. package/build/map/vue_js/taint_utils.js +2 -1
  137. package/build/map/vue_js/taint_utils.js.map +1 -1
  138. package/build/map/vue_js/vue_resolveFetch.js +3 -2
  139. package/build/map/vue_js/vue_resolveFetch.js.map +1 -1
  140. package/build/map/vue_js/vue_resolveHttpClient.js +3 -2
  141. package/build/map/vue_js/vue_resolveHttpClient.js.map +1 -1
  142. package/build/map/vue_js/vue_resolveXhr.js +3 -2
  143. package/build/map/vue_js/vue_resolveXhr.js.map +1 -1
  144. package/build/refactor/index.js +399 -60
  145. package/build/refactor/index.js.map +1 -1
  146. package/build/refactor/next/helpers.js +194 -13
  147. package/build/refactor/next/helpers.js.map +1 -1
  148. package/build/refactor/next/index.js +223 -36
  149. package/build/refactor/next/index.js.map +1 -1
  150. package/build/refactor/next/transform.js +905 -55
  151. package/build/refactor/next/transform.js.map +1 -1
  152. package/build/refactor/react/index.js +3 -3
  153. package/build/refactor/react/index.js.map +1 -1
  154. package/build/refactor/react/transform.js +2 -1
  155. package/build/refactor/react/transform.js.map +1 -1
  156. package/build/refactor/react/validator.js +2 -1
  157. package/build/refactor/react/validator.js.map +1 -1
  158. package/build/refactor/react-vite/index.js +39 -5
  159. package/build/refactor/react-vite/index.js.map +1 -1
  160. package/build/refactor/react-vite/vendor-analyze.js +3 -3
  161. package/build/refactor/react-vite/vendor-analyze.js.map +1 -1
  162. package/build/refactor/remote/config.js +17 -1
  163. package/build/refactor/remote/config.js.map +1 -1
  164. package/build/refactor/remote/hf-client.js +27 -2
  165. package/build/refactor/remote/hf-client.js.map +1 -1
  166. package/build/refactor/remote/version-detect.js +355 -0
  167. package/build/refactor/remote/version-detect.js.map +1 -0
  168. package/build/refactor/vue/index.js +176 -0
  169. package/build/refactor/vue/index.js.map +1 -0
  170. package/build/refactor/vue/vendor-analyze-vue.js +271 -0
  171. package/build/refactor/vue/vendor-analyze-vue.js.map +1 -0
  172. package/build/refactor/vue/vite.js +216 -0
  173. package/build/refactor/vue/vite.js.map +1 -0
  174. package/build/report/utility/genHtml.js +14 -3
  175. package/build/report/utility/genHtml.js.map +1 -1
  176. package/build/run/bundler-detect.js +140 -0
  177. package/build/run/bundler-detect.js.map +1 -0
  178. package/build/run/index.js +91 -5
  179. package/build/run/index.js.map +1 -1
  180. package/build/strings/index.js +6 -2
  181. package/build/strings/index.js.map +1 -1
  182. package/build/strings/trufflehog.js +71 -0
  183. package/build/strings/trufflehog.js.map +1 -0
  184. package/build/utility/makeReq.js +10 -9
  185. package/build/utility/makeReq.js.map +1 -1
  186. package/build/utility/postmanGenerator.js +2 -2
  187. package/build/utility/postmanGenerator.js.map +1 -1
  188. package/build/utility/puppeteerInstance.js +7 -1
  189. package/build/utility/puppeteerInstance.js.map +1 -1
  190. package/package.json +9 -5
  191. 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 { transformModule } from "./transform.js";
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 traverse = _traverse.default;
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 (Turbopack) module into an ECMAScript module file.
50
+ * Refactors a single Next.js (webpack) chunk into an ECMAScript module file.
19
51
  *
20
- * The `map` step extracts each Turbopack module as:
21
- * func_<id> = (e, t, r) => { … }
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
- * Parameters of the module arrow function:
24
- * e — runtime/module object (cross-module require: e.r(N))
25
- * t module object (t.exports used in interop)
26
- * r — exports object (Object.defineProperty(r, "name", …) sets named exports)
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
- * Returns a map containing the single transformed module: { [chunk.id]: code }.
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 refactorNext = (chunk) => __awaiter(void 0, void 0, void 0, function* () {
31
- console.log(chalk.cyan(`[i] Processing Next.js chunk: ${chunk.id}`));
32
- const ast = parser.parse(chunk.code, {
33
- sourceType: "unambiguous",
34
- plugins: ["jsx", "typescript"],
35
- errorRecovery: true,
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
- var _a, _b;
41
- // Only process top-level arrow functions (direct assignment like `func_511 = (e,t,r) => {...}`).
42
- if (!((_a = path.parentPath) === null || _a === void 0 ? void 0 : _a.isAssignmentExpression()) && !((_b = path.parentPath) === null || _b === void 0 ? void 0 : _b.isVariableDeclarator()))
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
- const statements = transformModule(captured);
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
- export default refactorNext;
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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/refactor/next/index.ts"],"names":[],"mappings":"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"}