Skip to content

Commit 22d291d

Browse files
authored
fix: asset info related source map can set null (#11497)
1 parent a7ca390 commit 22d291d

File tree

4 files changed

+45
-14
lines changed

4 files changed

+45
-14
lines changed

crates/node_binding/napi-binding.d.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -495,6 +495,10 @@ export declare class VirtualFileStore {
495495
}
496496
export type JsVirtualFileStore = VirtualFileStore
497497

498+
export interface AssetInfoRelated {
499+
sourceMap?: string | null
500+
}
501+
498502
export declare function async(path: string, request: string): Promise<ResolveResult>
499503

500504
export interface BuiltinPlugin {
@@ -674,10 +678,6 @@ export interface JsAssetEmittedArgs {
674678
targetPath: string
675679
}
676680

677-
export interface JsAssetInfoRelated {
678-
sourceMap?: string
679-
}
680-
681681
export interface JsBannerContentFnCtx {
682682
hash: string
683683
chunk: Chunk
@@ -1503,7 +1503,7 @@ export interface KnownAssetInfo {
15031503
/** when asset is javascript and an ESM */
15041504
javascriptModule?: boolean
15051505
/** related object to other assets, keyed by type of relation (only points from parent to child) */
1506-
related?: JsAssetInfoRelated
1506+
related?: AssetInfoRelated
15071507
/** unused css local ident for the css chunk */
15081508
cssUnusedIdents?: Array<string>
15091509
/** whether this asset is over the size limit */

crates/rspack_binding_api/src/asset.rs

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use napi::{
22
Env, JsValue,
33
bindgen_prelude::{
4-
Array, Either, FromNapiValue, JsObjectValue, Object, ToNapiValue, TypeName, Unknown,
4+
Array, Either, FromNapiValue, JsObjectValue, Null, Object, ToNapiValue, TypeName, Unknown,
55
ValidateNapiValue,
66
},
77
sys,
@@ -13,14 +13,20 @@ use rspack_napi_macros::field_names;
1313
use rustc_hash::FxHashSet;
1414

1515
#[napi(object)]
16-
pub struct JsAssetInfoRelated {
17-
pub source_map: Option<String>,
16+
pub struct AssetInfoRelated {
17+
pub source_map: Option<Either<String, Null>>,
1818
}
1919

20-
impl From<JsAssetInfoRelated> for rspack_core::AssetInfoRelated {
21-
fn from(i: JsAssetInfoRelated) -> Self {
20+
impl From<AssetInfoRelated> for rspack_core::AssetInfoRelated {
21+
fn from(i: AssetInfoRelated) -> Self {
2222
Self {
23-
source_map: i.source_map,
23+
source_map: match i.source_map {
24+
Some(either) => match either {
25+
Either::A(string) => Some(string),
26+
Either::B(_) => None,
27+
},
28+
None => None,
29+
},
2430
}
2531
}
2632
}
@@ -53,7 +59,7 @@ pub struct KnownAssetInfo {
5359
/// when asset is javascript and an ESM
5460
pub javascript_module: Option<bool>,
5561
/// related object to other assets, keyed by type of relation (only points from parent to child)
56-
pub related: Option<JsAssetInfoRelated>,
62+
pub related: Option<AssetInfoRelated>,
5763
/// unused css local ident for the css chunk
5864
pub css_unused_idents: Option<Vec<String>>,
5965
/// whether this asset is over the size limit
@@ -190,10 +196,10 @@ pub struct JsAsset {
190196
pub info: Reflector,
191197
}
192198

193-
impl From<rspack_core::AssetInfoRelated> for JsAssetInfoRelated {
199+
impl From<rspack_core::AssetInfoRelated> for AssetInfoRelated {
194200
fn from(related: rspack_core::AssetInfoRelated) -> Self {
195201
Self {
196-
source_map: related.source_map,
202+
source_map: related.source_map.map(Either::A),
197203
}
198204
}
199205
}

packages/rspack-test-tools/tests/configCases/asset/update-asset-sourcemap-null/index.js

Whitespace-only changes.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
const assert = require("assert");
2+
const fs = require("fs");
3+
4+
/**
5+
* @type {import('@rspack/core').Configuration}
6+
*/
7+
module.exports = {
8+
context: __dirname,
9+
plugins: [
10+
{
11+
apply(compiler) {
12+
compiler.hooks.compilation.tap("PLUGIN", compilation => {
13+
compilation.hooks.processAssets.tap("PLUGIN", assets => {
14+
for (const name in assets) {
15+
const source = assets[name];
16+
compilation.updateAsset(name, source, {
17+
related: { sourceMap: null },
18+
});
19+
}
20+
});
21+
});
22+
}
23+
}
24+
]
25+
};

0 commit comments

Comments
 (0)