@@ -2162,6 +2162,43 @@ function resolveClearCacheURL(specifier, parentURL, importAttributes) {
21622162 return cascadedLoader . resolveSync ( parentURL , request ) . url ;
21632163}
21642164
2165+ /**
2166+ * Remove path cache entries that resolve to a filename.
2167+ * @param {string } filename
2168+ * @returns {boolean } true if any entries were deleted.
2169+ */
2170+ function deletePathCacheEntries ( filename ) {
2171+ const cache = Module . _pathCache ;
2172+ const keys = ObjectKeys ( cache ) ;
2173+ let deleted = false ;
2174+ for ( let i = 0 ; i < keys . length ; i ++ ) {
2175+ const key = keys [ i ] ;
2176+ if ( cache [ key ] === filename ) {
2177+ delete cache [ key ] ;
2178+ deleted = true ;
2179+ }
2180+ }
2181+ return deleted ;
2182+ }
2183+
2184+ /**
2185+ * Remove relative resolve cache entries that resolve to a filename.
2186+ * @param {string } filename
2187+ * @returns {boolean } true if any entries were deleted.
2188+ */
2189+ function deleteRelativeResolveCacheEntries ( filename ) {
2190+ const keys = ObjectKeys ( relativeResolveCache ) ;
2191+ let deleted = false ;
2192+ for ( let i = 0 ; i < keys . length ; i ++ ) {
2193+ const key = keys [ i ] ;
2194+ if ( relativeResolveCache [ key ] === filename ) {
2195+ delete relativeResolveCache [ key ] ;
2196+ deleted = true ;
2197+ }
2198+ }
2199+ return deleted ;
2200+ }
2201+
21652202/**
21662203 * Clear CommonJS and/or ESM module cache entries.
21672204 * @param {string|URL } specifier
@@ -2201,9 +2238,19 @@ function clearCache(specifier, options = kEmptyObject) {
22012238 if ( mode !== 'esm' ) {
22022239 try {
22032240 const filename = resolveClearCacheFilename ( specifier , parentPath ) ;
2204- if ( filename && Module . _cache [ filename ] !== undefined ) {
2205- delete Module . _cache [ filename ] ;
2206- result . cjs = true ;
2241+ if ( filename ) {
2242+ let deleted = false ;
2243+ if ( Module . _cache [ filename ] !== undefined ) {
2244+ delete Module . _cache [ filename ] ;
2245+ deleted = true ;
2246+ }
2247+ if ( deletePathCacheEntries ( filename ) ) {
2248+ deleted = true ;
2249+ }
2250+ if ( deleteRelativeResolveCacheEntries ( filename ) ) {
2251+ deleted = true ;
2252+ }
2253+ result . cjs = deleted ;
22072254 }
22082255 } catch ( err ) {
22092256 if ( mode === 'cjs' ) {
@@ -2217,7 +2264,9 @@ function clearCache(specifier, options = kEmptyObject) {
22172264 const url = resolveClearCacheURL ( specifier , parentURL , importAttributes ) ;
22182265 const cascadedLoader =
22192266 require ( 'internal/modules/esm/loader' ) . getOrInitializeCascadedLoader ( ) ;
2220- result . esm = cascadedLoader . loadCache . deleteAll ( url ) ;
2267+ const loadDeleted = cascadedLoader . loadCache . deleteAll ( url ) ;
2268+ const resolveDeleted = cascadedLoader . deleteResolveCache ( url ) ;
2269+ result . esm = loadDeleted || resolveDeleted ;
22212270 } catch ( err ) {
22222271 if ( mode === 'esm' ) {
22232272 throw err ;
0 commit comments