@@ -276,6 +276,9 @@ pub struct ModuleInfo {
276276 /// or `@import { SomeType } from "npm:some-module"`.
277277 #[ serde( skip_serializing_if = "Vec::is_empty" , default ) ]
278278 pub jsdoc_imports : Vec < JsDocImportInfo > ,
279+ /// Source map URL extracted from sourceMappingURL comment
280+ #[ serde( skip_serializing_if = "Option::is_none" , default ) ]
281+ pub source_map_url : Option < SpecifierWithRange > ,
279282}
280283
281284fn is_false ( v : & bool ) -> bool {
@@ -442,6 +445,14 @@ pub fn find_jsx_import_source_types(text: &str) -> Option<regex::Match<'_>> {
442445 . and_then ( |c| c. get ( 1 ) )
443446}
444447
448+ /// Matches the `sourceMappingURL` comment.
449+ pub fn find_source_mapping_url ( text : & str ) -> Option < regex:: Match < ' _ > > {
450+ static SOURCE_MAPPING_URL_RE : Lazy < Regex > = Lazy :: new ( || {
451+ Regex :: new ( r"(?i)^[#@]\s*sourceMappingURL\s*=\s*(\S+)" ) . unwrap ( )
452+ } ) ;
453+ SOURCE_MAPPING_URL_RE . captures ( text) . and_then ( |c| c. get ( 1 ) )
454+ }
455+
445456/// Matches the `@ts-self-types` pragma.
446457pub fn find_ts_self_types ( text : & str ) -> Option < regex:: Match < ' _ > > {
447458 static TS_SELF_TYPES_RE : Lazy < Regex > = Lazy :: new ( || {
@@ -505,6 +516,7 @@ mod test {
505516 jsx_import_source : None ,
506517 jsx_import_source_types : None ,
507518 jsdoc_imports : Vec :: new ( ) ,
519+ source_map_url : None ,
508520 } ;
509521 run_serialization_test ( & module_info, json ! ( { } ) ) ;
510522 }
@@ -574,6 +586,7 @@ mod test {
574586 jsx_import_source : None ,
575587 jsx_import_source_types : None ,
576588 jsdoc_imports : Vec :: new ( ) ,
589+ source_map_url : None ,
577590 } ;
578591 run_serialization_test (
579592 & module_info,
@@ -659,6 +672,7 @@ mod test {
659672 jsx_import_source : None ,
660673 jsx_import_source_types : None ,
661674 jsdoc_imports : Vec :: new ( ) ,
675+ source_map_url : None ,
662676 } ;
663677 run_serialization_test (
664678 & module_info,
@@ -704,6 +718,7 @@ mod test {
704718 jsx_import_source : None ,
705719 jsx_import_source_types : None ,
706720 jsdoc_imports : Vec :: new ( ) ,
721+ source_map_url : None ,
707722 } ;
708723 run_serialization_test (
709724 & module_info,
@@ -734,6 +749,7 @@ mod test {
734749 } ) ,
735750 jsx_import_source_types : None ,
736751 jsdoc_imports : Vec :: new ( ) ,
752+ source_map_url : None ,
737753 } ;
738754 run_serialization_test (
739755 & module_info,
@@ -764,6 +780,7 @@ mod test {
764780 } ,
765781 } ) ,
766782 jsdoc_imports : Vec :: new ( ) ,
783+ source_map_url : None ,
767784 } ;
768785 run_serialization_test (
769786 & module_info,
@@ -819,6 +836,7 @@ mod test {
819836 resolution_mode : Some ( TypeScriptTypesResolutionMode :: Require ) ,
820837 } ,
821838 ] ) ,
839+ source_map_url : None ,
822840 } ;
823841 run_serialization_test (
824842 & module_info,
@@ -1053,6 +1071,7 @@ mod test {
10531071 jsx_import_source : None ,
10541072 jsx_import_source_types : None ,
10551073 jsdoc_imports : Vec :: new ( ) ,
1074+ source_map_url : None ,
10561075 } ;
10571076 let json = json ! ( {
10581077 "dependencies" : [ {
@@ -1097,6 +1116,7 @@ mod test {
10971116 jsx_import_source : None ,
10981117 jsx_import_source_types : None ,
10991118 jsdoc_imports : Vec :: new ( ) ,
1119+ source_map_url : None ,
11001120 } ;
11011121 let json = json ! ( {
11021122 "dependencies" : [ {
0 commit comments