Skip to content

Commit

Permalink
feat: new test case for context module factory before resolve hook
Browse files Browse the repository at this point in the history
  • Loading branch information
SyMind committed May 10, 2024
1 parent b19e926 commit 9ea9ff3
Show file tree
Hide file tree
Showing 7 changed files with 67 additions and 17 deletions.
32 changes: 19 additions & 13 deletions crates/node_binding/src/plugins/interceptor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1219,10 +1219,13 @@ impl ContextModuleFactoryBeforeResolve for ContextModuleFactoryBeforeResolveTap
match self.function.call_with_promise(js_result).await {
Ok(js_result) => match js_result {
napi::bindgen_prelude::Either::A(_) => Ok(BeforeResolveResult::Ignored),
napi::bindgen_prelude::Either::B(d) => Ok(BeforeResolveResult::Data(BeforeResolveData {
context: d.context,
request: d.request,
})),
napi::bindgen_prelude::Either::B(d) => {
let data = BeforeResolveData {
context: d.context,
request: d.request,
};
Ok(BeforeResolveResult::Data(Box::new(data)))
}
},
Err(err) => Err(err),
}
Expand All @@ -1249,15 +1252,18 @@ impl ContextModuleFactoryAfterResolve for ContextModuleFactoryAfterResolveTap {
};
match self.function.call_with_promise(js_result).await? {
napi::Either::A(_) => Ok(AfterResolveResult::Ignored),
napi::Either::B(d) => Ok(AfterResolveResult::Data(AfterResolveData {
resource: d.resource,
context: d.context,
request: d.request,
reg_exp: match d.reg_exp {
Some(r) => Some(RspackRegex::new(&r)?),
None => None,
},
})),
napi::Either::B(d) => {
let data = AfterResolveData {
resource: d.resource,
context: d.context,
request: d.request,
reg_exp: match d.reg_exp {
Some(r) => Some(RspackRegex::new(&r)?),
None => None,
},
};
Ok(AfterResolveResult::Data(Box::new(data)))
}
}
}

Expand Down
8 changes: 4 additions & 4 deletions crates/rspack_core/src/context_module_factory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ use crate::{
#[derive(Clone)]
pub enum BeforeResolveResult {
Ignored,
Data(BeforeResolveData),
Data(Box<BeforeResolveData>),
}

#[derive(Clone)]
Expand All @@ -37,7 +37,7 @@ pub struct BeforeResolveData {
#[derive(Clone)]
pub enum AfterResolveResult {
Ignored,
Data(AfterResolveData),
Data(Box<AfterResolveData>),
}

#[derive(Clone)]
Expand Down Expand Up @@ -127,7 +127,7 @@ impl ContextModuleFactory {
.plugin_driver
.context_module_factory_hooks
.before_resolve
.call(BeforeResolveResult::Data(before_resolve_data))
.call(BeforeResolveResult::Data(Box::new(before_resolve_data)))
.await?
{
BeforeResolveResult::Ignored => Ok(Some(ModuleFactoryResult::default())),
Expand Down Expand Up @@ -299,7 +299,7 @@ impl ContextModuleFactory {
.plugin_driver
.context_module_factory_hooks
.after_resolve
.call(AfterResolveResult::Data(after_resolve_data))
.call(AfterResolveResult::Data(Box::new(after_resolve_data)))
.await?
{
AfterResolveResult::Ignored => Ok(Some(ModuleFactoryResult::default())),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
it("should compile", async () => {
try {
["fr.js"].map(file => {
require("./locale/" + file);
});
} catch (e) {
expect(e.message).toContain("Cannot find module './fr.js'")
}
["zh.js"].map(file => {
expect(require("./locale/" + file).default).toBe("你好");
});
["en.js"].map(file => {
expect(require("./locale/" + file).default).toBe("hello");
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export default 'hello';
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export default 'bonjour';
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export default '你好';
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
const pluginName = "plugin";

class Plugin {
apply(compiler) {
compiler.hooks.contextModuleFactory.tap(
pluginName,
contextModuleFactory => {
contextModuleFactory.hooks.beforeResolve.tap(pluginName, resolveData => {
if (resolveData.request.includes("./locale")) {
resolveData.regExp = /[/\\](en(\.js)?|zh(\.js)?)$/;
return resolveData;
}
});
}
);
}
}
/**@type {import('@rspack/cli').Configuration}*/
module.exports = {
context: __dirname,
entry: "./index.js",
module: {
rules: []
},
plugins: [new Plugin()]
};

0 comments on commit 9ea9ff3

Please sign in to comment.