@@ -14,7 +14,7 @@ use indicatif::ProgressStyle;
14
14
use log:: { debug, info, warn} ;
15
15
use sentry:: types:: DebugId ;
16
16
use sha1_smol:: Digest ;
17
- use sourcemap:: SourceMap ;
17
+ use sourcemap:: { DecodedMap , SourceMap } ;
18
18
use symbolic:: debuginfo:: js:: {
19
19
discover_debug_id, discover_sourcemap_embedded_debug_id, discover_sourcemaps_location,
20
20
} ;
@@ -947,20 +947,54 @@ impl SourceMapProcessor {
947
947
bail ! ( "Invalid embedded sourcemap in source file {source_url}" ) ;
948
948
} ;
949
949
950
- let mut sourcemap = SourceMap :: from_slice ( & decoded) . with_context ( || {
951
- format ! ( "Invalid embedded sourcemap in source file {source_url}" )
952
- } ) ?;
950
+ let mut sourcemap =
951
+ sourcemap:: decode_slice ( & decoded) . with_context ( || {
952
+ format ! ( "Invalid embedded sourcemap in source file {source_url}" )
953
+ } ) ?;
953
954
954
955
let debug_id = sourcemap
955
- . get_debug_id ( )
956
+ . debug_id ( )
956
957
. unwrap_or_else ( || inject:: debug_id_from_bytes_hashed ( & decoded) ) ;
957
958
958
959
let source_file = self . sources . get_mut ( source_url) . unwrap ( ) ;
959
- let source_file_contents = Arc :: make_mut ( & mut source_file. contents ) ;
960
- let adjustment_map = inject:: fixup_js_file ( source_file_contents, debug_id)
961
- . context ( format ! ( "Failed to process {}" , source_file. path. display( ) ) ) ?;
962
960
963
- sourcemap. adjust_mappings ( & adjustment_map) ;
961
+ match & mut sourcemap {
962
+ DecodedMap :: Regular ( sourcemap) => {
963
+ adjust_regular_sourcemap ( sourcemap, source_file, debug_id) ?;
964
+ }
965
+ DecodedMap :: Hermes ( sourcemap) => {
966
+ adjust_regular_sourcemap ( sourcemap, source_file, debug_id) ?;
967
+ }
968
+ DecodedMap :: Index ( sourcemap) => {
969
+ let source_file_contents = Arc :: make_mut ( & mut source_file. contents ) ;
970
+ if sourcemap. adjust_sections_offset_rows ( 1 ) {
971
+ let injected = inject:: inject_at_start (
972
+ str:: from_utf8 ( source_file_contents) . with_context (
973
+ || {
974
+ format ! (
975
+ "{} is not UTF-8" ,
976
+ source_file. path. display( )
977
+ )
978
+ } ,
979
+ ) ?,
980
+ debug_id,
981
+ ) ;
982
+
983
+ source_file_contents. clear ( ) ;
984
+ source_file_contents. extend ( injected. as_bytes ( ) ) ;
985
+ } else {
986
+ // We can't adjust the section offset rows, so we have to inject at the end
987
+ inject:: fixup_js_file_end ( source_file_contents, debug_id)
988
+ . with_context ( || {
989
+ format ! (
990
+ "Failed to inject debug id into {}" ,
991
+ source_file. path. display( )
992
+ )
993
+ } ) ?;
994
+ }
995
+ }
996
+ }
997
+
964
998
sourcemap. set_debug_id ( Some ( debug_id) ) ;
965
999
966
1000
decoded. clear ( ) ;
@@ -969,7 +1003,10 @@ impl SourceMapProcessor {
969
1003
let encoded = data_encoding:: BASE64 . encode ( & decoded) ;
970
1004
let new_sourcemap_url = format ! ( "{DATA_PREAMBLE}{encoded}" ) ;
971
1005
972
- inject:: replace_sourcemap_url ( source_file_contents, & new_sourcemap_url) ?;
1006
+ inject:: replace_sourcemap_url (
1007
+ Arc :: make_mut ( & mut source_file. contents ) ,
1008
+ & new_sourcemap_url,
1009
+ ) ?;
973
1010
* sourcemap_url = Some ( SourceMapReference :: from_url ( new_sourcemap_url) ) ;
974
1011
975
1012
debug_id
@@ -1000,11 +1037,12 @@ impl SourceMapProcessor {
1000
1037
let ( mut sourcemap, debug_id, debug_id_fresh) = {
1001
1038
let sourcemap_file = & self . sources [ & sourcemap_url] ;
1002
1039
1003
- let sm = SourceMap :: from_slice ( & sourcemap_file. contents ) . context (
1004
- format ! ( "Invalid sourcemap at {}" , sourcemap_file. url) ,
1005
- ) ?;
1040
+ let sm =
1041
+ sourcemap:: decode_slice ( & sourcemap_file. contents ) . context (
1042
+ format ! ( "Invalid sourcemap at {}" , sourcemap_file. url) ,
1043
+ ) ?;
1006
1044
1007
- match sm. get_debug_id ( ) {
1045
+ match sm. debug_id ( ) {
1008
1046
Some ( debug_id) => ( sm, debug_id, false ) ,
1009
1047
None => {
1010
1048
let debug_id = inject:: debug_id_from_bytes_hashed (
@@ -1016,13 +1054,45 @@ impl SourceMapProcessor {
1016
1054
} ;
1017
1055
1018
1056
let source_file = self . sources . get_mut ( source_url) . unwrap ( ) ;
1019
- let adjustment_map = inject:: fixup_js_file (
1020
- Arc :: make_mut ( & mut source_file. contents ) ,
1021
- debug_id,
1022
- )
1023
- . context ( format ! ( "Failed to process {}" , source_file. path. display( ) ) ) ?;
1024
1057
1025
- sourcemap. adjust_mappings ( & adjustment_map) ;
1058
+ match & mut sourcemap {
1059
+ DecodedMap :: Regular ( sourcemap) => {
1060
+ adjust_regular_sourcemap ( sourcemap, source_file, debug_id) ?;
1061
+ }
1062
+ DecodedMap :: Hermes ( sourcemap) => {
1063
+ adjust_regular_sourcemap ( sourcemap, source_file, debug_id) ?;
1064
+ }
1065
+ DecodedMap :: Index ( sourcemap) => {
1066
+ let source_file_contents =
1067
+ Arc :: make_mut ( & mut source_file. contents ) ;
1068
+ if sourcemap. adjust_sections_offset_rows ( 1 ) {
1069
+ let injected = inject:: inject_at_start (
1070
+ str:: from_utf8 ( source_file_contents) . with_context (
1071
+ || {
1072
+ format ! (
1073
+ "{} is not UTF-8" ,
1074
+ source_file. path. display( )
1075
+ )
1076
+ } ,
1077
+ ) ?,
1078
+ debug_id,
1079
+ ) ;
1080
+
1081
+ source_file_contents. clear ( ) ;
1082
+ source_file_contents. extend ( injected. as_bytes ( ) ) ;
1083
+ } else {
1084
+ // We can't adjust the section offset rows, so we have to inject at the end
1085
+ inject:: fixup_js_file_end ( source_file_contents, debug_id)
1086
+ . with_context ( || {
1087
+ format ! (
1088
+ "Failed to inject debug id into {}" ,
1089
+ source_file. path. display( )
1090
+ )
1091
+ } ) ?;
1092
+ }
1093
+ }
1094
+ }
1095
+
1026
1096
sourcemap. set_debug_id ( Some ( debug_id) ) ;
1027
1097
1028
1098
let sourcemap_file = self . sources . get_mut ( & sourcemap_url) . unwrap ( ) ;
@@ -1103,6 +1173,20 @@ impl SourceMapProcessor {
1103
1173
}
1104
1174
}
1105
1175
1176
+ fn adjust_regular_sourcemap (
1177
+ sourcemap : & mut SourceMap ,
1178
+ source_file : & mut SourceFile ,
1179
+ debug_id : DebugId ,
1180
+ ) -> Result < ( ) > {
1181
+ #[ expect( deprecated) ]
1182
+ let adjustment_map = inject:: fixup_js_file ( Arc :: make_mut ( & mut source_file. contents ) , debug_id)
1183
+ . context ( format ! ( "Failed to process {}" , source_file. path. display( ) ) ) ?;
1184
+
1185
+ sourcemap. adjust_mappings ( & adjustment_map) ;
1186
+
1187
+ Ok ( ( ) )
1188
+ }
1189
+
1106
1190
fn validate_script ( source : & mut SourceFile ) -> Result < ( ) > {
1107
1191
if let Some ( sm_ref) = get_sourcemap_ref ( source) {
1108
1192
if let sourcemap:: SourceMapRef :: LegacyRef ( _) = sm_ref {
0 commit comments