@shriyanss/js-recon 1.3.1 → 1.4.1-alpha.1
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/CHANGELOG.md +45 -0
- package/CLAUDE.md +45 -0
- package/README.md +1 -0
- package/build/cs_mast/index.js +122 -0
- package/build/cs_mast/index.js.map +1 -0
- package/build/globalConfig.js +2 -2
- package/build/globalConfig.js.map +1 -1
- package/build/index.js +20 -5
- package/build/index.js.map +1 -1
- package/build/lazyLoad/downloadLoadedJsUtil.js +6 -1
- package/build/lazyLoad/downloadLoadedJsUtil.js.map +1 -1
- package/build/lazyLoad/methodFilter.js +49 -0
- package/build/lazyLoad/methodFilter.js.map +1 -0
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js +6 -1
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.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/checkSvelte.js +17 -0
- package/build/lazyLoad/techDetect/checkSvelte.js.map +1 -1
- package/build/lazyLoad/techDetect/index.js +11 -4
- package/build/lazyLoad/techDetect/index.js.map +1 -1
- package/build/map/vue_js/vue_resolveHttpClient.js +2 -1
- package/build/map/vue_js/vue_resolveHttpClient.js.map +1 -1
- package/build/map/vue_js/vue_resolveXhr.js +2 -1
- package/build/map/vue_js/vue_resolveXhr.js.map +1 -1
- package/build/refactor/index.js +126 -15
- package/build/refactor/index.js.map +1 -1
- package/build/refactor/next/helpers.js +214 -0
- package/build/refactor/next/helpers.js.map +1 -0
- package/build/refactor/next/index.js +40 -73
- package/build/refactor/next/index.js.map +1 -1
- package/build/refactor/next/transform.js +177 -0
- package/build/refactor/next/transform.js.map +1 -0
- package/build/refactor/next/validator.js +118 -0
- package/build/refactor/next/validator.js.map +1 -0
- package/build/refactor/react/helpers.js +93 -0
- package/build/refactor/react/helpers.js.map +1 -0
- package/build/refactor/react/index.js +186 -589
- package/build/refactor/react/index.js.map +1 -1
- package/build/refactor/react/library-classify.js +166 -0
- package/build/refactor/react/library-classify.js.map +1 -0
- package/build/refactor/react/transform.js +839 -0
- package/build/refactor/react/transform.js.map +1 -0
- package/build/refactor/react/validator.js +122 -0
- package/build/refactor/react/validator.js.map +1 -0
- package/build/utility/getChromiumPath.js +40 -0
- package/build/utility/getChromiumPath.js.map +1 -0
- package/build/utility/makeReq.js +11 -2
- package/build/utility/makeReq.js.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import * as t from "@babel/types";
|
|
2
|
+
export const VALID_IDENT_RE = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;
|
|
3
|
+
// Returns the numeric module ID if expr is `runtimeParam.r(<NumericLiteral>)`.
|
|
4
|
+
export const tryExtractTurbopackRequire = (expr, runtimeParam) => {
|
|
5
|
+
if (!t.isCallExpression(expr))
|
|
6
|
+
return null;
|
|
7
|
+
const callee = expr.callee;
|
|
8
|
+
if (!t.isMemberExpression(callee) || callee.computed)
|
|
9
|
+
return null;
|
|
10
|
+
if (!t.isIdentifier(callee.object, { name: runtimeParam }))
|
|
11
|
+
return null;
|
|
12
|
+
if (!t.isIdentifier(callee.property, { name: "r" }))
|
|
13
|
+
return null;
|
|
14
|
+
if (expr.arguments.length !== 1)
|
|
15
|
+
return null;
|
|
16
|
+
if (!t.isNumericLiteral(expr.arguments[0]))
|
|
17
|
+
return null;
|
|
18
|
+
return expr.arguments[0].value;
|
|
19
|
+
};
|
|
20
|
+
// Returns true if expr is `Object.defineProperty(target, "__esModule", ...)`.
|
|
21
|
+
export const isEsModuleMarker = (expr, exportsParam) => {
|
|
22
|
+
if (!t.isCallExpression(expr))
|
|
23
|
+
return false;
|
|
24
|
+
if (!isObjectDefinePropertyCallee(expr.callee))
|
|
25
|
+
return false;
|
|
26
|
+
if (expr.arguments.length < 2)
|
|
27
|
+
return false;
|
|
28
|
+
if (!t.isIdentifier(expr.arguments[0], { name: exportsParam }))
|
|
29
|
+
return false;
|
|
30
|
+
const nameArg = expr.arguments[1];
|
|
31
|
+
return t.isStringLiteral(nameArg) && nameArg.value === "__esModule";
|
|
32
|
+
};
|
|
33
|
+
// Returns true if expr.callee is `Object.defineProperty`.
|
|
34
|
+
const isObjectDefinePropertyCallee = (callee) => {
|
|
35
|
+
if (!t.isMemberExpression(callee) || callee.computed)
|
|
36
|
+
return false;
|
|
37
|
+
return (t.isIdentifier(callee.object, { name: "Object" }) &&
|
|
38
|
+
t.isIdentifier(callee.property, { name: "defineProperty" }));
|
|
39
|
+
};
|
|
40
|
+
// Extracts the return expression from a getter function:
|
|
41
|
+
// function() { return X; } or () => X or () => { return X; }
|
|
42
|
+
export const extractGetterReturnExpr = (getterFn) => {
|
|
43
|
+
var _a, _b;
|
|
44
|
+
if (t.isFunctionExpression(getterFn) || t.isFunctionDeclaration(getterFn)) {
|
|
45
|
+
const body = getterFn.body;
|
|
46
|
+
if (!t.isBlockStatement(body))
|
|
47
|
+
return null;
|
|
48
|
+
const stmts = body.body.filter((s) => !t.isEmptyStatement(s));
|
|
49
|
+
if (stmts.length !== 1 || !t.isReturnStatement(stmts[0]))
|
|
50
|
+
return null;
|
|
51
|
+
return (_a = stmts[0].argument) !== null && _a !== void 0 ? _a : null;
|
|
52
|
+
}
|
|
53
|
+
if (t.isArrowFunctionExpression(getterFn)) {
|
|
54
|
+
if (!t.isBlockStatement(getterFn.body))
|
|
55
|
+
return getterFn.body;
|
|
56
|
+
const stmts = getterFn.body.body.filter((s) => !t.isEmptyStatement(s));
|
|
57
|
+
if (stmts.length !== 1 || !t.isReturnStatement(stmts[0]))
|
|
58
|
+
return null;
|
|
59
|
+
return (_b = stmts[0].argument) !== null && _b !== void 0 ? _b : null;
|
|
60
|
+
}
|
|
61
|
+
return null;
|
|
62
|
+
};
|
|
63
|
+
// Matches `Object.defineProperty(exportsParam, "name", { ..., get: fn })`.
|
|
64
|
+
// Returns { exportName, returnExpr } or null. Skips "__esModule".
|
|
65
|
+
export const tryExtractDefinePropertyExport = (expr, exportsParam) => {
|
|
66
|
+
if (!t.isCallExpression(expr))
|
|
67
|
+
return null;
|
|
68
|
+
if (!isObjectDefinePropertyCallee(expr.callee))
|
|
69
|
+
return null;
|
|
70
|
+
if (expr.arguments.length < 3)
|
|
71
|
+
return null;
|
|
72
|
+
if (!t.isIdentifier(expr.arguments[0], { name: exportsParam }))
|
|
73
|
+
return null;
|
|
74
|
+
const nameArg = expr.arguments[1];
|
|
75
|
+
if (!t.isStringLiteral(nameArg))
|
|
76
|
+
return null;
|
|
77
|
+
const exportName = nameArg.value;
|
|
78
|
+
if (exportName === "__esModule")
|
|
79
|
+
return null;
|
|
80
|
+
const descriptor = expr.arguments[2];
|
|
81
|
+
if (!t.isObjectExpression(descriptor))
|
|
82
|
+
return null;
|
|
83
|
+
for (const prop of descriptor.properties) {
|
|
84
|
+
if (!t.isObjectProperty(prop) || prop.computed)
|
|
85
|
+
continue;
|
|
86
|
+
const key = prop.key;
|
|
87
|
+
if (!t.isIdentifier(key, { name: "get" }))
|
|
88
|
+
continue;
|
|
89
|
+
const getterFn = prop.value;
|
|
90
|
+
const returnExpr = extractGetterReturnExpr(getterFn);
|
|
91
|
+
if (returnExpr === null)
|
|
92
|
+
continue;
|
|
93
|
+
return { exportName, returnExpr };
|
|
94
|
+
}
|
|
95
|
+
return null;
|
|
96
|
+
};
|
|
97
|
+
// Checks whether `stmt` is the Turbopack interop boilerplate that ends in `moduleParam.exports = exportsParam.default`.
|
|
98
|
+
// Heuristic: ExpressionStatement whose expression (recursively) contains an assignment to `moduleParam.exports`.
|
|
99
|
+
export const isInteropBoilerplate = (stmt, moduleParam) => {
|
|
100
|
+
if (!t.isExpressionStatement(stmt))
|
|
101
|
+
return false;
|
|
102
|
+
return containsModuleExportsAssignment(stmt.expression, moduleParam);
|
|
103
|
+
};
|
|
104
|
+
const containsModuleExportsAssignment = (node, moduleParam) => {
|
|
105
|
+
if (t.isAssignmentExpression(node) &&
|
|
106
|
+
node.operator === "=" &&
|
|
107
|
+
t.isMemberExpression(node.left) &&
|
|
108
|
+
!node.left.computed &&
|
|
109
|
+
t.isIdentifier(node.left.object, { name: moduleParam }) &&
|
|
110
|
+
t.isIdentifier(node.left.property, { name: "exports" })) {
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
for (const key of Object.keys(node)) {
|
|
114
|
+
if (key === "type" || key === "loc" || key === "start" || key === "end")
|
|
115
|
+
continue;
|
|
116
|
+
const child = node[key];
|
|
117
|
+
if (!child || typeof child !== "object")
|
|
118
|
+
continue;
|
|
119
|
+
if (Array.isArray(child)) {
|
|
120
|
+
for (const item of child) {
|
|
121
|
+
if (item && typeof item.type === "string" && containsModuleExportsAssignment(item, moduleParam)) {
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
else if (typeof child.type === "string") {
|
|
127
|
+
if (containsModuleExportsAssignment(child, moduleParam))
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return false;
|
|
132
|
+
};
|
|
133
|
+
// Matches `for (var k in mapVarName) Object.defineProperty(exportsParam, k, ...)`.
|
|
134
|
+
// Returns the mapVarName or null.
|
|
135
|
+
export const tryExtractForInExportLoop = (stmt, exportsParam) => {
|
|
136
|
+
if (!t.isForInStatement(stmt))
|
|
137
|
+
return null;
|
|
138
|
+
// right must be a simple identifier (the map variable)
|
|
139
|
+
if (!t.isIdentifier(stmt.right))
|
|
140
|
+
return null;
|
|
141
|
+
const mapVarName = stmt.right.name;
|
|
142
|
+
// body: unwrap block if needed
|
|
143
|
+
let bodyStmt = stmt.body;
|
|
144
|
+
if (t.isBlockStatement(bodyStmt)) {
|
|
145
|
+
const nonEmpty = bodyStmt.body.filter((s) => !t.isEmptyStatement(s));
|
|
146
|
+
if (nonEmpty.length !== 1)
|
|
147
|
+
return null;
|
|
148
|
+
bodyStmt = nonEmpty[0];
|
|
149
|
+
}
|
|
150
|
+
if (!t.isExpressionStatement(bodyStmt))
|
|
151
|
+
return null;
|
|
152
|
+
const expr = bodyStmt.expression;
|
|
153
|
+
if (!t.isCallExpression(expr))
|
|
154
|
+
return null;
|
|
155
|
+
if (!isObjectDefinePropertyCallee(expr.callee))
|
|
156
|
+
return null;
|
|
157
|
+
if (expr.arguments.length < 1)
|
|
158
|
+
return null;
|
|
159
|
+
if (!t.isIdentifier(expr.arguments[0], { name: exportsParam }))
|
|
160
|
+
return null;
|
|
161
|
+
return mapVarName;
|
|
162
|
+
};
|
|
163
|
+
// Extracts all { exportName → returnExpr } entries from an export map object literal.
|
|
164
|
+
// The map has shape: { name: function() { return localVar; }, … }
|
|
165
|
+
export const extractExportsFromMap = (objExpr) => {
|
|
166
|
+
var _a;
|
|
167
|
+
const result = new Map();
|
|
168
|
+
for (const prop of objExpr.properties) {
|
|
169
|
+
if (!t.isObjectProperty(prop) && !t.isObjectMethod(prop))
|
|
170
|
+
continue;
|
|
171
|
+
const keyNode = prop.key;
|
|
172
|
+
let exportName = null;
|
|
173
|
+
if (t.isIdentifier(keyNode))
|
|
174
|
+
exportName = keyNode.name;
|
|
175
|
+
else if (t.isStringLiteral(keyNode))
|
|
176
|
+
exportName = keyNode.value;
|
|
177
|
+
if (!exportName || exportName === "__esModule")
|
|
178
|
+
continue;
|
|
179
|
+
let returnExpr = null;
|
|
180
|
+
if (t.isObjectProperty(prop)) {
|
|
181
|
+
returnExpr = extractGetterReturnExpr(prop.value);
|
|
182
|
+
}
|
|
183
|
+
else if (t.isObjectMethod(prop)) {
|
|
184
|
+
const m = prop;
|
|
185
|
+
const stmts = m.body.body.filter((s) => !t.isEmptyStatement(s));
|
|
186
|
+
if (stmts.length === 1 && t.isReturnStatement(stmts[0])) {
|
|
187
|
+
returnExpr = (_a = stmts[0].argument) !== null && _a !== void 0 ? _a : null;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
if (returnExpr !== null)
|
|
191
|
+
result.set(exportName, returnExpr);
|
|
192
|
+
}
|
|
193
|
+
return result;
|
|
194
|
+
};
|
|
195
|
+
// Builds an ECMAScript export statement given an export name and a return expression.
|
|
196
|
+
// Identifier return → export { ident as exportName }
|
|
197
|
+
// Other expression → export const exportName = <expr>
|
|
198
|
+
// Falls back to string export name when exportName is not a valid identifier.
|
|
199
|
+
export const makeExportStatement = (exportName, returnExpr) => {
|
|
200
|
+
const isValidIdent = VALID_IDENT_RE.test(exportName);
|
|
201
|
+
if (t.isIdentifier(returnExpr)) {
|
|
202
|
+
const exported = isValidIdent
|
|
203
|
+
? t.identifier(exportName)
|
|
204
|
+
: t.stringLiteral(exportName);
|
|
205
|
+
return t.exportNamedDeclaration(null, [t.exportSpecifier(returnExpr, exported)]);
|
|
206
|
+
}
|
|
207
|
+
if (isValidIdent) {
|
|
208
|
+
return t.exportNamedDeclaration(t.variableDeclaration("const", [t.variableDeclarator(t.identifier(exportName), returnExpr)]));
|
|
209
|
+
}
|
|
210
|
+
// Non-identifier name with a non-identifier value: introduce a temp binding.
|
|
211
|
+
const tempName = `_jsr_exp_${exportName.replace(/[^a-zA-Z0-9_$]/g, "_")}`;
|
|
212
|
+
return t.exportNamedDeclaration(null, [t.exportSpecifier(t.identifier(tempName), t.stringLiteral(exportName))]);
|
|
213
|
+
};
|
|
214
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/refactor/next/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,100 +10,67 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
import chalk from "chalk";
|
|
11
11
|
import parser from "@babel/parser";
|
|
12
12
|
import _traverse from "@babel/traverse";
|
|
13
|
-
import _generator from "@babel/generator";
|
|
14
13
|
import * as t from "@babel/types";
|
|
14
|
+
import { transformModule } from "./transform.js";
|
|
15
|
+
import { validateAndFix } from "./validator.js";
|
|
15
16
|
const traverse = _traverse.default;
|
|
16
|
-
const generate = _generator.default;
|
|
17
17
|
/**
|
|
18
|
-
* Refactors a Next.js
|
|
18
|
+
* Refactors a single Next.js (Turbopack) module into an ECMAScript module file.
|
|
19
19
|
*
|
|
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
|
|
20
|
+
* The `map` step extracts each Turbopack module as:
|
|
21
|
+
* func_<id> = (e, t, r) => { … }
|
|
25
22
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
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)
|
|
27
|
+
*
|
|
28
|
+
* Returns a map containing the single transformed module: { [chunk.id]: code }.
|
|
28
29
|
*/
|
|
29
30
|
const refactorNext = (chunk) => __awaiter(void 0, void 0, void 0, function* () {
|
|
30
|
-
console.log(chalk.cyan(`[i]
|
|
31
|
-
let codeCopy = chunk.code;
|
|
32
|
-
// parse the code
|
|
31
|
+
console.log(chalk.cyan(`[i] Processing Next.js chunk: ${chunk.id}`));
|
|
33
32
|
const ast = parser.parse(chunk.code, {
|
|
34
33
|
sourceType: "unambiguous",
|
|
35
34
|
plugins: ["jsx", "typescript"],
|
|
36
35
|
errorRecovery: true,
|
|
37
36
|
});
|
|
38
|
-
|
|
39
|
-
let thirdParamName;
|
|
37
|
+
let captured = null;
|
|
40
38
|
traverse(ast, {
|
|
41
|
-
FunctionDeclaration(path) {
|
|
42
|
-
if (path.node.params.length < 3)
|
|
43
|
-
return;
|
|
44
|
-
const thirdParam = path.node.params[2];
|
|
45
|
-
if (thirdParam.type !== "Identifier")
|
|
46
|
-
return;
|
|
47
|
-
thirdParamName = thirdParam.name;
|
|
48
|
-
path.stop();
|
|
49
|
-
},
|
|
50
39
|
ArrowFunctionExpression(path) {
|
|
51
|
-
|
|
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()))
|
|
52
43
|
return;
|
|
53
|
-
const
|
|
54
|
-
if (
|
|
44
|
+
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();
|
|
55
48
|
return;
|
|
56
|
-
|
|
49
|
+
}
|
|
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
|
+
};
|
|
57
60
|
path.stop();
|
|
58
61
|
},
|
|
59
62
|
});
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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
|
|
66
|
-
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);
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
|
-
});
|
|
81
|
-
codeCopy = generate(ast).code;
|
|
63
|
+
if (!captured) {
|
|
64
|
+
console.log(chalk.yellow(`[!] No module function found in chunk ${chunk.id} — skipping`));
|
|
65
|
+
return {};
|
|
82
66
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
functionName = path.node.id.name;
|
|
89
|
-
path.stop();
|
|
90
|
-
}
|
|
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
|
-
path.stop();
|
|
100
|
-
}
|
|
101
|
-
},
|
|
102
|
-
});
|
|
103
|
-
if (functionName) {
|
|
104
|
-
codeCopy += `\n\nexport default ${functionName};`;
|
|
67
|
+
const statements = transformModule(captured);
|
|
68
|
+
const code = validateAndFix(statements, chunk.id);
|
|
69
|
+
if (code === null) {
|
|
70
|
+
console.log(chalk.yellow(`[~] Module ${chunk.id} skipped due to unresolvable syntax errors`));
|
|
71
|
+
return {};
|
|
105
72
|
}
|
|
106
|
-
return
|
|
73
|
+
return { [chunk.id]: code };
|
|
107
74
|
});
|
|
108
75
|
export default refactorNext;
|
|
109
76
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/refactor/next/index.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,MAAM,MAAM,eAAe,CAAC;AACnC,OAAO,SAAS,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/refactor/next/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import _traverse from "@babel/traverse";
|
|
2
|
+
import * as t from "@babel/types";
|
|
3
|
+
import { tryExtractTurbopackRequire, tryExtractDefinePropertyExport, isEsModuleMarker, isInteropBoilerplate, tryExtractForInExportLoop, extractExportsFromMap, makeExportStatement, } from "./helpers.js";
|
|
4
|
+
const traverse = _traverse.default;
|
|
5
|
+
/**
|
|
6
|
+
* Transforms a single Turbopack module arrow function into ECMAScript module statements.
|
|
7
|
+
*
|
|
8
|
+
* Passes (top-level only to avoid placing exports inside nested functions):
|
|
9
|
+
* 1. Collect exports from Object.defineProperty(exportsParam, …) patterns + mark nodes for removal.
|
|
10
|
+
* 2. Combined filter + hoist: skip removed nodes; convert runtimeParam.r(N) declarators to imports.
|
|
11
|
+
* 3. Replace remaining inline runtimeParam.r(N) calls with hoisted identifiers.
|
|
12
|
+
* 4. Assemble: prepend import declarations, keep filtered body, append export declarations.
|
|
13
|
+
*/
|
|
14
|
+
export const transformModule = (mod) => {
|
|
15
|
+
const { fnPath, runtimeParam, moduleParam, exportsParam } = mod;
|
|
16
|
+
const body = fnPath.node.body;
|
|
17
|
+
if (!t.isBlockStatement(body))
|
|
18
|
+
return [];
|
|
19
|
+
// ── Pre-scan: find for-in export loops and their map variable declarations ──
|
|
20
|
+
// Map from variable name → the VariableDeclaration node that declares it as an export map.
|
|
21
|
+
// We also track the specific declarator so we can remove just that one if needed.
|
|
22
|
+
const exportMapVarNames = new Set();
|
|
23
|
+
const exportMapDeclNodes = new Map(); // varName → decl node
|
|
24
|
+
for (const stmt of body.body) {
|
|
25
|
+
const mapVarName = tryExtractForInExportLoop(stmt, exportsParam);
|
|
26
|
+
if (mapVarName !== null) {
|
|
27
|
+
exportMapVarNames.add(mapVarName);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
for (const stmt of body.body) {
|
|
31
|
+
if (!t.isVariableDeclaration(stmt))
|
|
32
|
+
continue;
|
|
33
|
+
for (const decl of stmt.declarations) {
|
|
34
|
+
if (t.isIdentifier(decl.id) &&
|
|
35
|
+
exportMapVarNames.has(decl.id.name) &&
|
|
36
|
+
decl.init &&
|
|
37
|
+
t.isObjectExpression(decl.init)) {
|
|
38
|
+
exportMapDeclNodes.set(decl.id.name, stmt);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// ── Pass 1: collect exports, mark statement nodes for removal ────────────────
|
|
43
|
+
const exportMap = new Map(); // exportName → returnExpr
|
|
44
|
+
const stmtsToRemove = new WeakSet();
|
|
45
|
+
for (const stmt of body.body) {
|
|
46
|
+
// Interop boilerplate.
|
|
47
|
+
if (isInteropBoilerplate(stmt, moduleParam)) {
|
|
48
|
+
stmtsToRemove.add(stmt);
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
if (t.isExpressionStatement(stmt)) {
|
|
52
|
+
const expr = stmt.expression;
|
|
53
|
+
// `Object.defineProperty(r, "__esModule", …)` — just an interop marker.
|
|
54
|
+
if (isEsModuleMarker(expr, exportsParam)) {
|
|
55
|
+
stmtsToRemove.add(stmt);
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
// Direct `Object.defineProperty(r, "name", { get: fn })`.
|
|
59
|
+
const direct = tryExtractDefinePropertyExport(expr, exportsParam);
|
|
60
|
+
if (direct) {
|
|
61
|
+
exportMap.set(direct.exportName, direct.returnExpr);
|
|
62
|
+
stmtsToRemove.add(stmt);
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
// SequenceExpression: may mix esModule markers and export definitions.
|
|
66
|
+
if (t.isSequenceExpression(expr)) {
|
|
67
|
+
const kept = [];
|
|
68
|
+
for (const sub of expr.expressions) {
|
|
69
|
+
if (isEsModuleMarker(sub, exportsParam))
|
|
70
|
+
continue;
|
|
71
|
+
const match = tryExtractDefinePropertyExport(sub, exportsParam);
|
|
72
|
+
if (match) {
|
|
73
|
+
exportMap.set(match.exportName, match.returnExpr);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
kept.push(sub);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (kept.length === 0) {
|
|
80
|
+
stmtsToRemove.add(stmt);
|
|
81
|
+
}
|
|
82
|
+
else if (kept.length < expr.expressions.length) {
|
|
83
|
+
// Trim the sequence in-place.
|
|
84
|
+
stmt.expression =
|
|
85
|
+
kept.length === 1 ? kept[0] : t.sequenceExpression(kept);
|
|
86
|
+
}
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// ForInStatement: `for (var k in mapVar) Object.defineProperty(exportsParam, k, …)`.
|
|
91
|
+
const mapVarName = tryExtractForInExportLoop(stmt, exportsParam);
|
|
92
|
+
if (mapVarName !== null) {
|
|
93
|
+
stmtsToRemove.add(stmt);
|
|
94
|
+
const declNode = exportMapDeclNodes.get(mapVarName);
|
|
95
|
+
if (declNode) {
|
|
96
|
+
// Extract exports from the map object.
|
|
97
|
+
for (const decl of declNode.declarations) {
|
|
98
|
+
if (t.isIdentifier(decl.id, { name: mapVarName }) && decl.init && t.isObjectExpression(decl.init)) {
|
|
99
|
+
const extracted = extractExportsFromMap(decl.init);
|
|
100
|
+
for (const [name, expr] of extracted)
|
|
101
|
+
exportMap.set(name, expr);
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Mark the map variable declaration for removal.
|
|
106
|
+
if (declNode.declarations.length === 1) {
|
|
107
|
+
stmtsToRemove.add(declNode);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
// Multiple declarators: remove only the export-map one.
|
|
111
|
+
declNode.declarations = declNode.declarations.filter((d) => !t.isIdentifier(d.id, { name: mapVarName }));
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// ── Pass 2: combined filter + require hoisting ───────────────────────────────
|
|
117
|
+
const hoistedImports = new Map(); // specifier → importName
|
|
118
|
+
const importNameByNumId = new Map(); // numId → importName
|
|
119
|
+
const filteredBody = [];
|
|
120
|
+
for (const stmt of body.body) {
|
|
121
|
+
if (stmtsToRemove.has(stmt))
|
|
122
|
+
continue;
|
|
123
|
+
if (t.isVariableDeclaration(stmt)) {
|
|
124
|
+
const keptDeclarators = [];
|
|
125
|
+
for (const decl of stmt.declarations) {
|
|
126
|
+
if (!t.isIdentifier(decl.id) || !decl.init) {
|
|
127
|
+
keptDeclarators.push(decl);
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
const numId = tryExtractTurbopackRequire(decl.init, runtimeParam);
|
|
131
|
+
if (numId === null) {
|
|
132
|
+
keptDeclarators.push(decl);
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
const spec = `./${numId}.js`;
|
|
136
|
+
if (!hoistedImports.has(spec)) {
|
|
137
|
+
hoistedImports.set(spec, decl.id.name);
|
|
138
|
+
importNameByNumId.set(numId, decl.id.name);
|
|
139
|
+
}
|
|
140
|
+
// Declarator removed — becomes a static import.
|
|
141
|
+
}
|
|
142
|
+
if (keptDeclarators.length > 0) {
|
|
143
|
+
filteredBody.push(t.variableDeclaration(stmt.kind, keptDeclarators));
|
|
144
|
+
}
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
filteredBody.push(stmt);
|
|
148
|
+
}
|
|
149
|
+
// ── Pass 3: replace remaining inline runtimeParam.r(N) calls ────────────────
|
|
150
|
+
body.body = filteredBody;
|
|
151
|
+
fnPath.traverse({
|
|
152
|
+
CallExpression(p) {
|
|
153
|
+
const numId = tryExtractTurbopackRequire(p.node, runtimeParam);
|
|
154
|
+
if (numId === null)
|
|
155
|
+
return;
|
|
156
|
+
let name = importNameByNumId.get(numId);
|
|
157
|
+
if (!name) {
|
|
158
|
+
name = `_jsr_module_${numId}`;
|
|
159
|
+
hoistedImports.set(`./${numId}.js`, name);
|
|
160
|
+
importNameByNumId.set(numId, name);
|
|
161
|
+
}
|
|
162
|
+
p.replaceWith(t.identifier(name));
|
|
163
|
+
p.skip();
|
|
164
|
+
},
|
|
165
|
+
});
|
|
166
|
+
// ── Step 4: assemble — prepend imports, filtered body, append exports ────────
|
|
167
|
+
const importStmts = [];
|
|
168
|
+
for (const [spec, name] of hoistedImports) {
|
|
169
|
+
importStmts.push(t.importDeclaration([t.importNamespaceSpecifier(t.identifier(name))], t.stringLiteral(spec)));
|
|
170
|
+
}
|
|
171
|
+
const exportStmts = [];
|
|
172
|
+
for (const [exportName, returnExpr] of exportMap) {
|
|
173
|
+
exportStmts.push(makeExportStatement(exportName, returnExpr));
|
|
174
|
+
}
|
|
175
|
+
return [...importStmts, ...body.body, ...exportStmts];
|
|
176
|
+
};
|
|
177
|
+
//# sourceMappingURL=transform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../../../src/refactor/next/transform.ts"],"names":[],"mappings":"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"}
|