@@ -2153,6 +2153,43 @@ function resolveClearCacheURL(specifier, parentURL, importAttributes) {
21532153 return cascadedLoader . resolveSync ( parentURL , request ) . url ;
21542154}
21552155
2156+ /**
2157+ * Remove path cache entries that resolve to a filename.
2158+ * @param {string } filename
2159+ * @returns {boolean } true if any entries were deleted.
2160+ */
2161+ function deletePathCacheEntries ( filename ) {
2162+ const cache = Module . _pathCache ;
2163+ const keys = ObjectKeys ( cache ) ;
2164+ let deleted = false ;
2165+ for ( let i = 0 ; i < keys . length ; i ++ ) {
2166+ const key = keys [ i ] ;
2167+ if ( cache [ key ] === filename ) {
2168+ delete cache [ key ] ;
2169+ deleted = true ;
2170+ }
2171+ }
2172+ return deleted ;
2173+ }
2174+
2175+ /**
2176+ * Remove relative resolve cache entries that resolve to a filename.
2177+ * @param {string } filename
2178+ * @returns {boolean } true if any entries were deleted.
2179+ */
2180+ function deleteRelativeResolveCacheEntries ( filename ) {
2181+ const keys = ObjectKeys ( relativeResolveCache ) ;
2182+ let deleted = false ;
2183+ for ( let i = 0 ; i < keys . length ; i ++ ) {
2184+ const key = keys [ i ] ;
2185+ if ( relativeResolveCache [ key ] === filename ) {
2186+ delete relativeResolveCache [ key ] ;
2187+ deleted = true ;
2188+ }
2189+ }
2190+ return deleted ;
2191+ }
2192+
21562193/**
21572194 * Clear CommonJS and/or ESM module cache entries.
21582195 * @param {string|URL } specifier
@@ -2192,9 +2229,19 @@ function clearCache(specifier, options = kEmptyObject) {
21922229 if ( mode !== 'esm' ) {
21932230 try {
21942231 const filename = resolveClearCacheFilename ( specifier , parentPath ) ;
2195- if ( filename && Module . _cache [ filename ] !== undefined ) {
2196- delete Module . _cache [ filename ] ;
2197- result . cjs = true ;
2232+ if ( filename ) {
2233+ let deleted = false ;
2234+ if ( Module . _cache [ filename ] !== undefined ) {
2235+ delete Module . _cache [ filename ] ;
2236+ deleted = true ;
2237+ }
2238+ if ( deletePathCacheEntries ( filename ) ) {
2239+ deleted = true ;
2240+ }
2241+ if ( deleteRelativeResolveCacheEntries ( filename ) ) {
2242+ deleted = true ;
2243+ }
2244+ result . cjs = deleted ;
21982245 }
21992246 } catch ( err ) {
22002247 if ( mode === 'cjs' ) {
@@ -2208,7 +2255,9 @@ function clearCache(specifier, options = kEmptyObject) {
22082255 const url = resolveClearCacheURL ( specifier , parentURL , importAttributes ) ;
22092256 const cascadedLoader =
22102257 require ( 'internal/modules/esm/loader' ) . getOrInitializeCascadedLoader ( ) ;
2211- result . esm = cascadedLoader . loadCache . deleteAll ( url ) ;
2258+ const loadDeleted = cascadedLoader . loadCache . deleteAll ( url ) ;
2259+ const resolveDeleted = cascadedLoader . deleteResolveCache ( url ) ;
2260+ result . esm = loadDeleted || resolveDeleted ;
22122261 } catch ( err ) {
22132262 if ( mode === 'esm' ) {
22142263 throw err ;
0 commit comments