@@ -9,9 +9,9 @@ const RSC_LAYER = 'react-server-components';
99const LOCAL_MODULE_SPECIFIER_PATTERN = / ^ \. { 1 , 2 } \/ / ;
1010const SOURCE_DIRECTIVE_PATTERN = / ^ \s * [ ' " ] u s e (?: c l i e n t | s e r v e r ) [ ' " ] \s * ; ? / m;
1111const EXPORT_FROM_SPECIFIER_PATTERN =
12- / e x p o r t \s + (?: \* \s + f r o m | \{ [ ^ } ] * \} \s + f r o m ) \s * [ ' " ] ( [ ^ ' " ] + ) [ ' " ] / g;
12+ / e x p o r t \s + ( t y p e \s + ) ? ( ?:\* \s + f r o m | \{ [ ^ } ] * \} \s + f r o m ) \s * [ ' " ] ( [ ^ ' " ] + ) [ ' " ] / g;
1313const IMPORT_FROM_SPECIFIER_PATTERN =
14- / i m p o r t \s + (?: t y p e \s + ) ? (?: [ ^ ' " ; ] + ?\s + f r o m \s + ) ? [ ' " ] ( [ ^ ' " ] + ) [ ' " ] / g;
14+ / i m p o r t \s + ( t y p e \s + ) ? (?: [ ^ ' " ; ] + ?\s + f r o m \s + ) ? [ ' " ] ( [ ^ ' " ] + ) [ ' " ] / g;
1515const DYNAMIC_IMPORT_SPECIFIER_PATTERN = / i m p o r t \( \s * [ ' " ] ( [ ^ ' " ] + ) [ ' " ] \s * \) / g;
1616const SOURCE_ENTRY_EXTENSIONS = [
1717 '.ts' ,
@@ -139,6 +139,11 @@ const shouldInjectCallbackBootstrap = (importPaths: string[]) =>
139139 referencesCallbackCapableSourceModule ( importPath ) ,
140140 ) ;
141141
142+ interface SourceModuleSpecifier {
143+ moduleSpecifier : string ;
144+ typeOnly : boolean ;
145+ }
146+
142147const readSourceFile = ( filePath : string ) => {
143148 try {
144149 return fs . readFileSync ( filePath , 'utf8' ) ;
@@ -198,14 +203,33 @@ const referencesCallbackCapableSourceModule = (importPath: string) => {
198203 return true ;
199204 }
200205
201- const localSpecifierMatches = [
202- ...sourceText . matchAll ( EXPORT_FROM_SPECIFIER_PATTERN ) ,
203- ...sourceText . matchAll ( IMPORT_FROM_SPECIFIER_PATTERN ) ,
204- ...sourceText . matchAll ( DYNAMIC_IMPORT_SPECIFIER_PATTERN ) ,
206+ const localSpecifierMatches : SourceModuleSpecifier [ ] = [
207+ ...Array . from (
208+ sourceText . matchAll ( EXPORT_FROM_SPECIFIER_PATTERN ) ,
209+ match => ( {
210+ moduleSpecifier : match [ 2 ] ,
211+ typeOnly : Boolean ( match [ 1 ] ) ,
212+ } ) ,
213+ ) ,
214+ ...Array . from (
215+ sourceText . matchAll ( IMPORT_FROM_SPECIFIER_PATTERN ) ,
216+ match => ( {
217+ moduleSpecifier : match [ 2 ] ,
218+ typeOnly : Boolean ( match [ 1 ] ) ,
219+ } ) ,
220+ ) ,
221+ ...Array . from (
222+ sourceText . matchAll ( DYNAMIC_IMPORT_SPECIFIER_PATTERN ) ,
223+ match => ( {
224+ moduleSpecifier : match [ 1 ] ,
225+ typeOnly : false ,
226+ } ) ,
227+ ) ,
205228 ] ;
206- for ( const match of localSpecifierMatches ) {
207- const [ moduleSpecifier ] = match . slice ( 1 ) ;
229+
230+ for ( const { moduleSpecifier, typeOnly } of localSpecifierMatches ) {
208231 if (
232+ typeOnly ||
209233 typeof moduleSpecifier !== 'string' ||
210234 ! LOCAL_MODULE_SPECIFIER_PATTERN . test ( moduleSpecifier )
211235 ) {
0 commit comments