@@ -66,6 +66,7 @@ impl StyleSheetLike<'_, '_> {
66
66
minify_type : MinifyType ,
67
67
enable_srcmap : bool ,
68
68
handle_nesting : bool ,
69
+ mut origin_source_map : Option < parcel_sourcemap:: SourceMap > ,
69
70
) -> Result < CssOutput > {
70
71
let ss = & self . 0 ;
71
72
let mut srcmap = if enable_srcmap {
@@ -94,8 +95,12 @@ impl StyleSheetLike<'_, '_> {
94
95
if let Some ( srcmap) = & mut srcmap {
95
96
debug_assert_eq ! ( ss. sources. len( ) , 1 ) ;
96
97
97
- srcmap. add_sources ( ss. sources . clone ( ) ) ;
98
- srcmap. set_source_content ( 0 , code) ?;
98
+ if let Some ( origin_source_map) = origin_source_map. as_mut ( ) {
99
+ let _ = srcmap. extends ( origin_source_map) ;
100
+ } else {
101
+ srcmap. add_sources ( ss. sources . clone ( ) ) ;
102
+ srcmap. set_source_content ( 0 , code) ?;
103
+ }
99
104
}
100
105
101
106
let srcmap = match srcmap {
@@ -193,7 +198,7 @@ pub async fn process_css_with_placeholder(
193
198
194
199
// We use NoMinify because this is not a final css. We need to replace url references,
195
200
// and we do final codegen with proper minification.
196
- let ( result, _) = stylesheet. to_css ( & code, MinifyType :: NoMinify , false , false ) ?;
201
+ let ( result, _) = stylesheet. to_css ( & code, MinifyType :: NoMinify , false , false , None ) ?;
197
202
198
203
let exports = result. exports . map ( |exports| {
199
204
let mut exports = exports. into_iter ( ) . collect :: < FxIndexMap < _ , _ > > ( ) ;
@@ -222,6 +227,7 @@ pub async fn finalize_css(
222
227
result : Vc < CssWithPlaceholderResult > ,
223
228
chunking_context : Vc < Box < dyn ChunkingContext > > ,
224
229
minify_type : MinifyType ,
230
+ origin_source_map : Vc < OptionStringifiedSourceMap > ,
225
231
) -> Result < Vc < FinalCssResult > > {
226
232
let result = result. await ?;
227
233
match & * result {
@@ -259,7 +265,21 @@ pub async fn finalize_css(
259
265
FileContent :: Content ( v) => v. content ( ) . to_str ( ) ?,
260
266
_ => bail ! ( "this case should be filtered out while parsing" ) ,
261
267
} ;
262
- let ( result, srcmap) = stylesheet. to_css ( & code, minify_type, true , true ) ?;
268
+
269
+ let origin_source_map = origin_source_map. await ?. as_ref ( ) . map ( |rope| rope. clone ( ) ) ;
270
+
271
+ let origin_source_map = origin_source_map. as_ref ( ) . and_then ( |rope| {
272
+ rope. to_str ( ) . ok ( ) . and_then ( |cow| {
273
+ if cow. is_empty ( ) {
274
+ None
275
+ } else {
276
+ parcel_sourcemap:: SourceMap :: from_json ( "" , & cow) . ok ( )
277
+ }
278
+ } )
279
+ } ) ;
280
+
281
+ let ( result, srcmap) =
282
+ stylesheet. to_css ( & code, minify_type, true , true , origin_source_map) ?;
263
283
264
284
Ok ( FinalCssResult :: Ok {
265
285
output_code : result. code ,
0 commit comments