mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 10:28:47 +00:00
don't rewrite module.exports if assign target is update or replace (#3147)
* don't rewrite `module.exports` if assign target is `update` or `replace` * missing `is_delete_target`, check de-opt before rewriting
This commit is contained in:
@@ -16156,6 +16156,7 @@ fn NewParser_(
|
||||
.{
|
||||
.is_call_target = is_call_target,
|
||||
.assign_target = in.assign_target,
|
||||
.is_delete_target = is_delete_target,
|
||||
// .is_template_tag = p.template_tag != null,
|
||||
},
|
||||
)) |_expr| {
|
||||
@@ -17438,14 +17439,6 @@ fn NewParser_(
|
||||
p.recordUsage(p.require_ref);
|
||||
return p.newExpr(E.Identifier{ .ref = p.require_ref }, name_loc);
|
||||
} else if (!p.commonjs_named_exports_deoptimized and strings.eqlComptime(name, "exports")) {
|
||||
// Deoptimizations:
|
||||
// delete module.exports
|
||||
// module.exports();
|
||||
|
||||
if (identifier_opts.is_call_target or identifier_opts.is_delete_target or identifier_opts.assign_target == .update) {
|
||||
p.deoptimizeCommonJSNamedExports();
|
||||
return null;
|
||||
}
|
||||
|
||||
// Detect if we are doing
|
||||
//
|
||||
@@ -17453,7 +17446,13 @@ fn NewParser_(
|
||||
// foo: "bar"
|
||||
// }
|
||||
//
|
||||
if (identifier_opts.assign_target == .replace and
|
||||
// Note that it cannot be any of these:
|
||||
//
|
||||
// module.exports += { };
|
||||
// delete module.exports = {};
|
||||
// module.exports()
|
||||
if (!(identifier_opts.is_call_target or identifier_opts.is_delete_target) and
|
||||
identifier_opts.assign_target == .replace and
|
||||
p.stmt_expr_value == .e_binary and
|
||||
p.stmt_expr_value.e_binary.op == .bin_assign)
|
||||
{
|
||||
@@ -17596,6 +17595,14 @@ fn NewParser_(
|
||||
return p.newExpr(E.Missing{}, name_loc);
|
||||
}
|
||||
|
||||
// Deoptimizations:
|
||||
// delete module.exports
|
||||
// module.exports();
|
||||
if (identifier_opts.is_call_target or identifier_opts.is_delete_target or identifier_opts.assign_target != .none) {
|
||||
p.deoptimizeCommonJSNamedExports();
|
||||
return null;
|
||||
}
|
||||
|
||||
// rewrite `module.exports` to `exports`
|
||||
return p.newExpr(E.Identifier{ .ref = p.exports_ref }, name_loc);
|
||||
} else if (p.options.bundle and strings.eqlComptime(name, "id") and identifier_opts.assign_target == .none) {
|
||||
|
||||
Reference in New Issue
Block a user