feat(transformer): support ModuleRunnerTransform (#9371)

close: #9169 

NOTE: I didn't copy any `sourcemap` tests to here, because these are not
directly related to this plugin.

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: 翠 / green <green@sapphi.red>
This commit is contained in:
authored and GitHub committed 2025-03-03 11:38:47 +08:00
1 parent 7d7f16c713
commit aa06932abc
6 files changed
+2108 -3

No files matched your search

Generated
+2
View File
@@ -2228,12 +2228,14 @@ dependencies = [
"oxc_sourcemap",
"oxc_span",
"oxc_syntax",
"oxc_tasks_common",
"oxc_traverse",
"pico-args",
"rustc-hash",
"serde",
"serde_json",
"sha1",
"similar",
]
[[package]]
+2
View File
@@ -50,7 +50,9 @@ insta = { workspace = true }
oxc_codegen = { workspace = true }
oxc_parser = { workspace = true }
oxc_sourcemap = { workspace = true }
oxc_tasks_common = { workspace = true }
pico-args = { workspace = true }
similar = { workspace = true }
[features]
default = []
@@ -375,7 +375,7 @@ impl<'a> LegacyDecoratorMetadata<'a, '_> {
let binding = MaybeBoundIdentifier::from_identifier_reference(ident, ctx);
let ident1 = binding.create_read_expression(ctx);
let ident2 = binding.create_read_expression(ctx);
let member = create_property_access(ident1, &qualified.right.name, ctx);
let member = create_property_access(SPAN, ident1, &qualified.right.name, ctx);
Self::create_checked_value(ident2, member, ctx)
} else {
// `A.B.C` -> `typeof A !== "undefined" && (_a = A.B) !== void 0 && _a.C`
@@ -401,7 +401,7 @@ impl<'a> LegacyDecoratorMetadata<'a, '_> {
);
let object = binding.create_read_expression(ctx);
let member = create_property_access(object, &qualified.right.name, ctx);
let member = create_property_access(SPAN, object, &qualified.right.name, ctx);
ctx.ast.expression_logical(SPAN, left, LogicalOperator::And, member)
}
}
@@ -1,5 +1,7 @@
mod inject_global_variables;
mod module_runner_transform;
mod replace_global_defines;
pub use inject_global_variables::*;
pub use module_runner_transform::*;
pub use replace_global_defines::*;
File diff suppressed because it is too large. Load diff
@@ -84,10 +84,22 @@ pub fn create_prototype_member<'a>(
/// `object` -> `object.a`.
pub fn create_property_access<'a>(
span: Span,
object: Expression<'a>,
property: &str,
ctx: &TraverseCtx<'a>,
) -> Expression<'a> {
let property = ctx.ast.identifier_name(SPAN, ctx.ast.atom(property));
Expression::from(ctx.ast.member_expression_static(SPAN, object, property, false))
Expression::from(ctx.ast.member_expression_static(span, object, property, false))
}
/// `object` -> `object['a']`.
pub fn create_compute_property_access<'a>(
span: Span,
object: Expression<'a>,
property: &str,
ctx: &TraverseCtx<'a>,
) -> Expression<'a> {
let expression = ctx.ast.expression_string_literal(SPAN, ctx.ast.atom(property), None);
Expression::from(ctx.ast.member_expression_computed(span, object, expression, false))
}