in packages/metro-runtime/src/polyfills/require.js [734:805]
const runUpdatedModule = function (
id: ModuleID,
factory?: FactoryFn,
dependencyMap?: DependencyMap,
): boolean {
const mod = modules[id];
if (mod == null) {
throw new Error('[Refresh] Expected to find the module.');
}
const {hot} = mod;
if (!hot) {
throw new Error('[Refresh] Expected module.hot to always exist in DEV.');
}
if (hot._disposeCallback) {
try {
hot._disposeCallback();
} catch (error) {
console.error(
`Error while calling dispose handler for module ${id}: `,
error,
);
}
}
if (factory) {
mod.factory = factory;
}
if (dependencyMap) {
mod.dependencyMap = dependencyMap;
}
mod.hasError = false;
mod.error = undefined;
mod.importedAll = EMPTY;
mod.importedDefault = EMPTY;
mod.isInitialized = false;
const prevExports = mod.publicModule.exports;
mod.publicModule.exports = {};
hot._didAccept = false;
hot._acceptCallback = null;
hot._disposeCallback = null;
metroRequire(id);
if (mod.hasError) {
// This error has already been reported via a redbox.
// We know it's likely a typo or some mistake that was just introduced.
// Our goal now is to keep the rest of the application working so that by
// the time user fixes the error, the app isn't completely destroyed
// underneath the redbox. So we'll revert the module object to the last
// successful export and stop propagating this update.
mod.hasError = false;
mod.isInitialized = true;
mod.error = null;
mod.publicModule.exports = prevExports;
// We errored. Stop the update.
return true;
}
if (hot._acceptCallback) {
try {
hot._acceptCallback();
} catch (error) {
console.error(
`Error while calling accept handler for module ${id}: `,
error,
);
}
}
// No error.
return false;
};