Skip to content

Commit

Permalink
fix: add some other webpack string name
Browse files Browse the repository at this point in the history
  • Loading branch information
shikuan.sk committed Nov 11, 2024
1 parent b6f4f5e commit 9e57431
Showing 1 changed file with 46 additions and 5 deletions.
51 changes: 46 additions & 5 deletions crates/mako/src/visitors/webpack_require.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,23 @@
use swc_core::common::{Mark, DUMMY_SP};
use swc_core::ecma::ast::{Expr, UnaryExpr};
use swc_core::ecma::ast::{Expr, Ident, UnaryExpr};
use swc_core::ecma::visit::VisitMut;

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

const WEBPACK_REQUIRE_IDENT: &str = "__webpack_require__";
const WEBPACK_REQUIRE: &str = "__webpack_require__";
const WEBPACK_HASH: &str = "__webpack_hash__";
const WEBPACK_LAYER: &str = "__webpack_layer__";
const WEBPACK_PUBLIC_PATH: &str = "__webpack_public_path__";
const WEBPACK_MODULES: &str = "__webpack_modules__";
const WEBPACK_MODULE: &str = "__webpack_module__";
const WEBPACK_CHUNK_LOAD: &str = "__webpack_chunk_load__";
const WEBPACK_BASE_URI: &str = "__webpack_base_uri__";
const NON_WEBPACK_REQUIRE: &str = "__non_webpack_require__";
const SYSTEM_CONTEXT: &str = "__system_context__";
const WEBPACK_SHARE_SCOPES: &str = "__webpack_share_scopes__";
const WEBPACK_INIT_SHARING: &str = "__webpack_init_sharing__";
const WEBPACK_NONCE: &str = "__webpack_nonce__";
const WEBPACK_CHUNK_NAME: &str = "__webpack_chunkname__";
const WEBPACK_RUNTIME_ID: &str = "__webpack_runtime_id__";
const WEBPACK_GET_SCRIPT_FILENAME: &str = "__webpack_get_script_filename__";

pub struct WebpackRequire {
pub unresolved_mark: Mark,
Expand All @@ -14,14 +27,37 @@ impl WebpackRequire {
pub fn new(unresolved_mark: Mark) -> Self {
Self { unresolved_mark }
}
fn is_ident_webpack(&self, ident: &Ident, unresolved_mark: &Mark) -> bool {
[
WEBPACK_REQUIRE,
WEBPACK_HASH,
WEBPACK_LAYER,
WEBPACK_PUBLIC_PATH,
WEBPACK_MODULES,
WEBPACK_MODULE,
WEBPACK_CHUNK_LOAD,
WEBPACK_BASE_URI,
NON_WEBPACK_REQUIRE,
SYSTEM_CONTEXT,
WEBPACK_SHARE_SCOPES,
WEBPACK_INIT_SHARING,
WEBPACK_NONCE,
WEBPACK_CHUNK_NAME,
WEBPACK_RUNTIME_ID,
WEBPACK_GET_SCRIPT_FILENAME,
]
.iter()
.any(|&i| i == &ident.sym)
&& ident.ctxt.outer() == *unresolved_mark
}
}

impl VisitMut for WebpackRequire {
// find the "typeof __webpack_require__" in the ast tree
fn visit_mut_unary_expr(&mut self, unary_expr: &mut UnaryExpr) {
if unary_expr.op.as_str() == "typeof"
&& let Some(arg_ident) = unary_expr.arg.as_ident()
&& is_ident_undefined(arg_ident, WEBPACK_REQUIRE_IDENT, &self.unresolved_mark)
&& self.is_ident_webpack(arg_ident, &self.unresolved_mark)
{
unary_expr.arg = Expr::undefined(DUMMY_SP)
}
Expand All @@ -44,6 +80,11 @@ mod tests {
);
}

#[test]
fn test_webpack_module_ident() {
assert_eq!(run(r#"typeof __webpack_modules__;"#), r#"typeof void 0;"#);
}

fn run(js_code: &str) -> String {
let mut test_utils = TestUtils::gen_js_ast(js_code);
let ast = test_utils.ast.js_mut();
Expand Down

0 comments on commit 9e57431

Please sign in to comment.