@@ -706,17 +706,26 @@ fn build_from_sources_impl(
706706 " [{}/{}] ok: {} ({:.2?})" ,
707707 done, total_modules, pm. module_name, elapsed
708708 ) ;
709- let import_names: Vec < String > = pm. import_parts . iter ( )
710- . map ( |parts| interner:: resolve_module_name ( parts) )
711- . collect ( ) ;
712- let exports_changed = if let Some ( ref mut c) = cache {
713- c. update ( pm. module_name . clone ( ) , pm. source_hash , result. exports . clone ( ) , import_names)
714- } else {
715- true
716- } ;
717- // Only add to rebuilt_set if exports actually changed
718- if exports_changed {
709+ let has_errors = !result. errors . is_empty ( ) ;
710+ if has_errors {
711+ // Don't cache modules with type errors
712+ if let Some ( ref mut c) = cache {
713+ c. remove ( & pm. module_name ) ;
714+ }
719715 rebuilt_set. insert ( pm. module_name . clone ( ) ) ;
716+ } else {
717+ let import_names: Vec < String > = pm. import_parts . iter ( )
718+ . map ( |parts| interner:: resolve_module_name ( parts) )
719+ . collect ( ) ;
720+ let exports_changed = if let Some ( ref mut c) = cache {
721+ c. update ( pm. module_name . clone ( ) , pm. source_hash , result. exports . clone ( ) , import_names)
722+ } else {
723+ true
724+ } ;
725+ // Only add to rebuilt_set if exports actually changed
726+ if exports_changed {
727+ rebuilt_set. insert ( pm. module_name . clone ( ) ) ;
728+ }
720729 }
721730 // Register exports immediately — result.exports is moved,
722731 // then result (with its types HashMap) is dropped.
@@ -834,16 +843,25 @@ fn build_from_sources_impl(
834843 " [{}/{}] ok: {} ({:.2?})" ,
835844 done, total_modules, pm. module_name, elapsed
836845 ) ;
837- let import_names: Vec < String > = pm. import_parts . iter ( )
838- . map ( |parts| interner:: resolve_module_name ( parts) )
839- . collect ( ) ;
840- let exports_changed = if let Some ( ref mut c) = cache {
841- c. update ( pm. module_name . clone ( ) , pm. source_hash , result. exports . clone ( ) , import_names)
842- } else {
843- true
844- } ;
845- if exports_changed {
846+ let has_errors = !result. errors . is_empty ( ) ;
847+ if has_errors {
848+ // Don't cache modules with type errors
849+ if let Some ( ref mut c) = cache {
850+ c. remove ( & pm. module_name ) ;
851+ }
846852 rebuilt_set. insert ( pm. module_name . clone ( ) ) ;
853+ } else {
854+ let import_names: Vec < String > = pm. import_parts . iter ( )
855+ . map ( |parts| interner:: resolve_module_name ( parts) )
856+ . collect ( ) ;
857+ let exports_changed = if let Some ( ref mut c) = cache {
858+ c. update ( pm. module_name . clone ( ) , pm. source_hash , result. exports . clone ( ) , import_names)
859+ } else {
860+ true
861+ } ;
862+ if exports_changed {
863+ rebuilt_set. insert ( pm. module_name . clone ( ) ) ;
864+ }
847865 }
848866 registry. register ( & pm. module_parts , result. exports ) ;
849867 module_results. push ( ModuleResult {
0 commit comments