Skip to content

Commit 7ffa2fa

Browse files
authored
feat: add contextInfo.issuerLayer for nmf resolve hooks (#9504)
1 parent 9f1c332 commit 7ffa2fa

File tree

10 files changed

+48
-6
lines changed

10 files changed

+48
-6
lines changed

crates/node_binding/binding.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,7 @@ export interface JsAfterResolveData {
423423
request: string
424424
context: string
425425
issuer: string
426+
issuerLayer?: string
426427
fileDependencies: Array<string>
427428
contextDependencies: Array<string>
428429
missingDependencies: Array<string>
@@ -489,6 +490,7 @@ export interface JsBeforeResolveArgs {
489490
request: string
490491
context: string
491492
issuer: string
493+
issuerLayer?: string
492494
}
493495

494496
export interface JsBuildMeta {
@@ -647,6 +649,7 @@ export interface JsFactorizeArgs {
647649
request: string
648650
context: string
649651
issuer: string
652+
issuerLayer?: string
650653
}
651654

652655
export interface JsFactoryMeta {
@@ -795,6 +798,7 @@ export interface JsResolveArgs {
795798
request: string
796799
context: string
797800
issuer: string
801+
issuerLayer?: string
798802
}
799803

800804
export interface JsResolveForSchemeArgs {

crates/node_binding/src/normal_module_factory.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ pub struct JsBeforeResolveArgs {
1616
pub request: String,
1717
pub context: String,
1818
pub issuer: String,
19+
pub issuer_layer: Option<String>,
1920
}
2021

2122
pub type JsBeforeResolveOutput = (Option<bool>, JsBeforeResolveArgs);
@@ -25,6 +26,7 @@ pub struct JsFactorizeArgs {
2526
pub request: String,
2627
pub context: String,
2728
pub issuer: String,
29+
pub issuer_layer: Option<String>,
2830
}
2931

3032
pub type JsFactorizeOutput = JsFactorizeArgs;
@@ -34,6 +36,7 @@ pub struct JsResolveArgs {
3436
pub request: String,
3537
pub context: String,
3638
pub issuer: String,
39+
pub issuer_layer: Option<String>,
3740
}
3841

3942
pub type JsResolveOutput = JsResolveArgs;
@@ -50,6 +53,7 @@ pub struct JsAfterResolveData {
5053
pub request: String,
5154
pub context: String,
5255
pub issuer: String,
56+
pub issuer_layer: Option<String>,
5357
pub file_dependencies: Vec<String>,
5458
pub context_dependencies: Vec<String>,
5559
pub missing_dependencies: Vec<String>,

crates/node_binding/src/plugins/interceptor.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1550,6 +1550,7 @@ impl NormalModuleFactoryBeforeResolve for NormalModuleFactoryBeforeResolveTap {
15501550
.as_ref()
15511551
.map(|issuer| issuer.to_string())
15521552
.unwrap_or_default(),
1553+
issuer_layer: data.issuer_layer.clone(),
15531554
})
15541555
.await
15551556
{
@@ -1586,6 +1587,7 @@ impl NormalModuleFactoryFactorize for NormalModuleFactoryFactorizeTap {
15861587
.as_ref()
15871588
.map(|issuer| issuer.to_string())
15881589
.unwrap_or_default(),
1590+
issuer_layer: data.issuer_layer.clone(),
15891591
})
15901592
.await
15911593
{
@@ -1623,6 +1625,7 @@ impl NormalModuleFactoryResolve for NormalModuleFactoryResolveTap {
16231625
.as_ref()
16241626
.map(|issuer| issuer.to_string())
16251627
.unwrap_or_default(),
1628+
issuer_layer: data.issuer_layer.clone(),
16261629
})
16271630
.await
16281631
{
@@ -1685,6 +1688,7 @@ impl NormalModuleFactoryAfterResolve for NormalModuleFactoryAfterResolveTap {
16851688
.as_ref()
16861689
.map(|issuer| issuer.to_string())
16871690
.unwrap_or_default(),
1691+
issuer_layer: data.issuer_layer.clone(),
16881692
file_dependencies: data
16891693
.file_dependencies
16901694
.clone()
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
it("should resolve with replaced request", function () {
2+
expect(require("./request.v1")).toBe("v2");
3+
});
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = "v1";
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = "v2";
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
const { NormalModuleReplacementPlugin } = require("@rspack/core");
2+
3+
module.exports = /** @type {import("@rspack/core").Configuration} */ ({
4+
entry: {
5+
main: {
6+
import: "./index.js",
7+
layer: "test"
8+
}
9+
},
10+
plugins: [
11+
new NormalModuleReplacementPlugin(/request.v1(\.|$)/, args => {
12+
expect(args.request).toBe("./request.v1");
13+
expect(args.contextInfo.issuer).toBe("test");
14+
expect(args.contextInfo.issuerLayer.endsWith("index.js")).toBe(true);
15+
args.request = args.request.replace(/request\.v1(\.|$)/, "request.v2$1");
16+
})
17+
],
18+
experiments: {
19+
layers: true
20+
}
21+
});

packages/rspack/etc/core.api.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1176,7 +1176,7 @@ export type Context = string;
11761176
// @public (undocumented)
11771177
type ContextInfo = {
11781178
issuer: string;
1179-
issuerLayer?: string;
1179+
issuerLayer?: string | null;
11801180
};
11811181

11821182
// @public (undocumented)

packages/rspack/src/Module.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export type ResourceDataWithData = ResourceData & {
2626
export type CreateData = Partial<JsCreateData>;
2727
export type ContextInfo = {
2828
issuer: string;
29-
issuerLayer?: string;
29+
issuerLayer?: string | null;
3030
};
3131
export type ResolveData = {
3232
contextInfo: ContextInfo;

packages/rspack/src/taps/normalModuleFactory.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ export const createNormalModuleFactoryHooksRegisters: CreatePartialRegisters<
1919
return async function (resolveData: binding.JsBeforeResolveArgs) {
2020
const normalizedResolveData: ResolveData = {
2121
contextInfo: {
22-
issuer: resolveData.issuer
22+
issuer: resolveData.issuer,
23+
issuerLayer: resolveData.issuerLayer ?? null
2324
},
2425
request: resolveData.request,
2526
context: resolveData.context,
@@ -46,7 +47,8 @@ export const createNormalModuleFactoryHooksRegisters: CreatePartialRegisters<
4647
return async function (resolveData: binding.JsFactorizeArgs) {
4748
const normalizedResolveData: ResolveData = {
4849
contextInfo: {
49-
issuer: resolveData.issuer
50+
issuer: resolveData.issuer,
51+
issuerLayer: resolveData.issuerLayer ?? null
5052
},
5153
request: resolveData.request,
5254
context: resolveData.context,
@@ -73,7 +75,8 @@ export const createNormalModuleFactoryHooksRegisters: CreatePartialRegisters<
7375
return async function (resolveData: binding.JsFactorizeArgs) {
7476
const normalizedResolveData: ResolveData = {
7577
contextInfo: {
76-
issuer: resolveData.issuer
78+
issuer: resolveData.issuer,
79+
issuerLayer: resolveData.issuerLayer ?? null
7780
},
7881
request: resolveData.request,
7982
context: resolveData.context,
@@ -115,7 +118,8 @@ export const createNormalModuleFactoryHooksRegisters: CreatePartialRegisters<
115118
return async function (arg: binding.JsAfterResolveData) {
116119
const data: ResolveData = {
117120
contextInfo: {
118-
issuer: arg.issuer
121+
issuer: arg.issuer,
122+
issuerLayer: arg.issuerLayer ?? null
119123
},
120124
request: arg.request,
121125
context: arg.context,

0 commit comments

Comments
 (0)