Skip to content

Commit 9e2de9f

Browse files
committed
Optimize import_meta regex handling
1 parent 61d2052 commit 9e2de9f

File tree

3 files changed

+18
-12
lines changed

3 files changed

+18
-12
lines changed

crates/rspack_plugin_javascript/src/parser_plugin/import_meta_context_dependency_parser_plugin.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ use crate::{
1313
eval::{self, BasicEvaluatedExpression},
1414
object_properties::{get_bool_by_obj_prop, get_literal_str_by_obj_prop, get_regex_by_obj_prop},
1515
},
16-
visitors::{JavascriptParser, clean_regexp_in_context_module, context_reg_exp, expr_name},
16+
visitors::{
17+
JavascriptParser, clean_regexp_in_context_module, default_context_reg_exp, expr_name,
18+
},
1719
};
1820

1921
fn create_import_meta_context_dependency(
@@ -45,11 +47,10 @@ fn create_import_meta_context_dependency(
4547
}
4648
None
4749
})?;
48-
let reg = r"^\.\/.*$";
4950
let context_options = if let Some(obj) = node.args.get(1).and_then(|arg| arg.expr.as_object()) {
5051
let regexp = get_regex_by_obj_prop(obj, "regExp");
5152
let regexp_span = regexp.map(|r| r.span().into());
52-
let regexp = regexp.map_or(RspackRegex::new(reg).expect("reg failed"), |regexp| {
53+
let regexp = regexp.map_or_else(default_context_reg_exp, |regexp| {
5354
RspackRegex::try_from(regexp).expect("reg failed")
5455
});
5556
let include = get_regex_by_obj_prop(obj, "include")
@@ -84,7 +85,7 @@ fn create_import_meta_context_dependency(
8485
mode: ContextMode::Sync,
8586
include: None,
8687
exclude: None,
87-
reg_exp: context_reg_exp(reg, "", None, parser),
88+
reg_exp: clean_regexp_in_context_module(default_context_reg_exp(), None, parser),
8889
category: DependencyCategory::Esm,
8990
request: context.clone(),
9091
context,

crates/rspack_plugin_javascript/src/parser_plugin/require_context_dependency_parser_plugin.rs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,11 @@ use swc_core::{common::Spanned, ecma::ast::CallExpr};
88
use super::JavascriptParserPlugin;
99
use crate::{
1010
dependency::RequireContextDependency,
11-
visitors::{JavascriptParser, clean_regexp_in_context_module},
11+
visitors::{JavascriptParser, clean_regexp_in_context_module, default_context_reg_exp},
1212
};
1313

1414
pub struct RequireContextDependencyParserPlugin;
1515

16-
const DEFAULT_REGEXP_STR: &str = r"^\.\/.*$";
17-
1816
impl JavascriptParserPlugin for RequireContextDependencyParserPlugin {
1917
fn call(&self, parser: &mut JavascriptParser, expr: &CallExpr, for_name: &str) -> Option<bool> {
2018
if for_name != "require.context" {
@@ -39,17 +37,14 @@ impl JavascriptParserPlugin for RequireContextDependencyParserPlugin {
3937
let reg_exp_expr = parser.evaluate_expression(&expr.args[2].expr);
4038
let reg_exp = if !reg_exp_expr.is_regexp() {
4139
// FIXME: return `None` in webpack
42-
RspackRegex::new(DEFAULT_REGEXP_STR).expect("reg should success")
40+
default_context_reg_exp()
4341
} else {
4442
let (expr, flags) = reg_exp_expr.regexp();
4543
RspackRegex::with_flags(expr.as_str(), flags.as_str()).expect("reg should success")
4644
};
4745
(reg_exp, Some(expr.args[2].expr.span().into()))
4846
} else {
49-
(
50-
RspackRegex::new(DEFAULT_REGEXP_STR).expect("reg should success"),
51-
None,
52-
)
47+
(default_context_reg_exp(), None)
5348
};
5449

5550
let recursive = if expr.args.len() >= 2 {

crates/rspack_plugin_javascript/src/visitors/dependency/util.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use std::sync::LazyLock;
2+
13
use rspack_core::DependencyRange;
24
use rspack_error::{Diagnostic, Error, Severity};
35
use rspack_regex::RspackRegex;
@@ -8,6 +10,9 @@ use swc_core::{
810

911
use super::JavascriptParser;
1012

13+
static DEFAULT_CONTEXT_REGEXP: LazyLock<RspackRegex> =
14+
LazyLock::new(|| RspackRegex::new(r"^\.\/.*$").expect("reg failed"));
15+
1116
pub mod expr_name {
1217
pub const MODULE: &str = "module";
1318
pub const MODULE_HOT: &str = "module.hot";
@@ -52,6 +57,11 @@ pub fn create_traceable_error(
5257
)
5358
}
5459

60+
#[inline]
61+
pub fn default_context_reg_exp() -> RspackRegex {
62+
DEFAULT_CONTEXT_REGEXP.clone()
63+
}
64+
5565
pub fn context_reg_exp(
5666
expr: &str,
5767
flags: &str,

0 commit comments

Comments
 (0)