in packages/metro/src/node-haste/ModuleCache.js [91:124]
processFileChange(type: string, filePath: string) {
if (this._moduleCache[filePath]) {
this._moduleCache[filePath].invalidate();
delete this._moduleCache[filePath];
}
if (this._packageCache[filePath]) {
this._packageCache[filePath].invalidate();
delete this._packageCache[filePath];
}
if (this._packagePathByModulePath[filePath]) {
// filePath is a module inside a package.
const packagePath = this._packagePathByModulePath[filePath];
delete this._packagePathByModulePath[filePath];
// This change doesn't invalidate any cached "closest package.json"
// queries for the package's other modules. Clean up only this module.
const modulePaths = this._modulePathsByPackagePath[packagePath];
if (modulePaths) {
modulePaths.delete(filePath);
if (modulePaths.size === 0) {
delete this._modulePathsByPackagePath[packagePath];
}
}
}
if (this._modulePathsByPackagePath[filePath]) {
// filePath is a package. This change invalidates all cached "closest
// package.json" queries for modules inside this package.
const modulePaths = this._modulePathsByPackagePath[filePath];
for (const modulePath of modulePaths) {
delete this._packagePathByModulePath[modulePath];
}
modulePaths.clear();
delete this._modulePathsByPackagePath[filePath];
}
}