Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions crates/mako/src/build/transform.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ use crate::features;
use crate::module::ModuleAst;
use crate::plugin::PluginTransformJsParam;
use crate::plugins::context_module::ContextModuleVisitor;
use crate::visitors::amd_define_overrides::amd_define_overrides;
use crate::visitors::css_assets::CSSAssets;
use crate::visitors::css_flexbugs::CSSFlexbugs;
use crate::visitors::css_px2rem::Px2Rem;
Expand Down Expand Up @@ -246,6 +247,7 @@ impl Transform {
..Default::default()
},
)),
Box::new(amd_define_overrides(unresolved_mark)),
];
ast.transform(
&mut vec![],
Expand Down
1 change: 0 additions & 1 deletion crates/mako/src/generate/transform.rs
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,6 @@ pub fn transform_js_generate(transform_js_param: TransformJsParam) -> Result<()>
let origin_comments = context.meta.script.origin_comments.read().unwrap();
let swc_comments = origin_comments.get_swc_comments();
ast.ast.visit_mut_with(&mut fixer(Some(swc_comments)));

Ok(())
})
})
Expand Down
1 change: 1 addition & 0 deletions crates/mako/src/visitors.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
pub(crate) mod amd_define_overrides;
pub(crate) mod async_module;
pub(crate) mod common_js;
pub(crate) mod css_assets;
Expand Down
82 changes: 82 additions & 0 deletions crates/mako/src/visitors/amd_define_overrides.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
use swc_core::common::{Mark, DUMMY_SP};
use swc_core::ecma::ast::*;
use swc_core::ecma::visit::{as_folder, Fold, VisitMut};

use crate::ast::utils::is_ident_undefined;

pub struct AmdDefineOverrides {
unresolved_mark: Mark,
}
Comment on lines +7 to +9
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

为公共结构体添加文档注释

AmdDefineOverrides 结构体是公共的,建议添加文档注释,以提高代码的可读性和维护性。


pub fn amd_define_overrides(unresolved_mark: Mark) -> impl VisitMut + Fold {
as_folder(AmdDefineOverrides { unresolved_mark })
}
Comment on lines +11 to +13
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

为公共函数添加文档注释

amd_define_overrides 函数是公共的,建议添加文档注释,解释其功能和使用场景,以便其他开发者了解其作用。


impl VisitMut for AmdDefineOverrides {
fn visit_mut_unary_expr(&mut self, node: &mut UnaryExpr) {
if node.op == UnaryOp::TypeOf
&& let Some(arg_ident) = node.arg.as_ident()
&& is_ident_undefined(arg_ident, "define", &self.unresolved_mark)
{
node.arg = Expr::undefined(DUMMY_SP)
}
}
}

#[cfg(test)]
mod tests {
use swc_core::common::GLOBALS;
use swc_core::ecma::visit::VisitMutWith;

use super::*;
use crate::ast::tests::TestUtils;

#[test]
fn unresolve_typeof_define_change_to_undefined() {
let mut tu = TestUtils::gen_js_ast(
r#"if(typeof define ==="function" && define.amd) {
console.log("amd")
}"#,
);
let js = tu.ast.js_mut();
let unresolved_mark = js.unresolved_mark;
GLOBALS.set(&tu.context.meta.script.globals, || {
js.ast
.visit_mut_with(&mut amd_define_overrides(unresolved_mark));
});

let code = tu.js_ast_to_code();

assert_eq!(
code,
r#"if (typeof void 0 === "function" && define.amd) {
console.log("amd");
}"#
)
}

#[test]
fn id_define_is_declared() {
let mut tu = TestUtils::gen_js_ast(
r#"let define = 1; if(typeof define ==="number") {
console.log("number")
}"#,
);
let js = tu.ast.js_mut();
let unresolved_mark = js.unresolved_mark;
GLOBALS.set(&tu.context.meta.script.globals, || {
js.ast
.visit_mut_with(&mut amd_define_overrides(unresolved_mark));
});

let code = tu.js_ast_to_code();

assert_eq!(
code,
r#"let define = 1;
if (typeof define === "number") {
console.log("number");
}"#
);
}
}
6 changes: 6 additions & 0 deletions e2e/fixtures/javascript.transform.amd/expect.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
const {parseBuildResult, injectSimpleJest} = require("../../../scripts/test-utils");
const {distDir} = parseBuildResult(__dirname);

injectSimpleJest()
require('./dist/index.js');

1 change: 1 addition & 0 deletions e2e/fixtures/javascript.transform.amd/mako.config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{}
13 changes: 13 additions & 0 deletions e2e/fixtures/javascript.transform.amd/src/a.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// @ts-nocheck
(function (root, definition) {
"use strict";
if (typeof define === 'function' && define.amd) {
define(definition);
} else if (typeof module === 'object' && module.exports) {
module.exports = definition();
} else {
root.log = definition();
}
}(this, function () {
return 1
}))
6 changes: 6 additions & 0 deletions e2e/fixtures/javascript.transform.amd/src/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
// @ts-ignore
import a from './a'

it("amd/umd should be exports as commonjs", () => {
expect(a).toEqual(1)
});