@@ -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 {
@@ -192,7 +197,7 @@ pub async fn process_css_with_placeholder(
192
197
193
198
// We use NoMinify because this is not a final css. We need to replace url references,
194
199
// and we do final codegen with proper minification.
195
- let ( result, _) = stylesheet. to_css ( & code, MinifyType :: NoMinify , false , false ) ?;
200
+ let ( result, _) = stylesheet. to_css ( & code, MinifyType :: NoMinify , false , false , None ) ?;
196
201
197
202
let exports = result. exports . map ( |exports| {
198
203
let mut exports = exports. into_iter ( ) . collect :: < FxIndexMap < _ , _ > > ( ) ;
@@ -221,6 +226,7 @@ pub async fn finalize_css(
221
226
result : Vc < CssWithPlaceholderResult > ,
222
227
chunking_context : Vc < Box < dyn ChunkingContext > > ,
223
228
minify_type : MinifyType ,
229
+ origin_source_map : Vc < OptionStringifiedSourceMap > ,
224
230
) -> Result < Vc < FinalCssResult > > {
225
231
let result = result. await ?;
226
232
match & * result {
@@ -258,7 +264,21 @@ pub async fn finalize_css(
258
264
FileContent :: Content ( v) => v. content ( ) . to_str ( ) ?,
259
265
_ => bail ! ( "this case should be filtered out while parsing" ) ,
260
266
} ;
261
- let ( result, srcmap) = stylesheet. to_css ( & code, minify_type, true , true ) ?;
267
+
268
+ let origin_source_map = origin_source_map. await ?. as_ref ( ) . map ( |rope| rope. clone ( ) ) ;
269
+
270
+ let origin_source_map = origin_source_map. as_ref ( ) . and_then ( |rope| {
271
+ rope. to_str ( ) . ok ( ) . and_then ( |cow| {
272
+ if cow. is_empty ( ) {
273
+ None
274
+ } else {
275
+ parcel_sourcemap:: SourceMap :: from_json ( "" , & cow) . ok ( )
276
+ }
277
+ } )
278
+ } ) ;
279
+
280
+ let ( result, srcmap) =
281
+ stylesheet. to_css ( & code, minify_type, true , true , origin_source_map) ?;
262
282
263
283
Ok ( FinalCssResult :: Ok {
264
284
output_code : result. code ,
0 commit comments