Clearer HMR error messages

Summary:
GraphNotFoundError: When the user moves the app to the background on Android, restarts the Metro server and reopens the app, since the client hasn't requested either a delta or a bundle, the graph cache of the server is empty and thus we can't compute an update for the client (what if changes happened when the metro server was down?).

RevisionNotFoundError: I didn't manage to reproduce that one. It could happen if two clients live side-by-side, requesting the exact same bundle. In the future, if we want to handle that case, we'll need to manage a list of clients listening to a single graph so that we don't try to update the same graph multiple times for a single file change.

Disconnection: Same as GraphNotFoundError, but happens when the user moves the app to the background on iOS.

Reviewed By: mjesun

Differential Revision: D12960939

fbshipit-source-id: 5ac1dc7fd12bad5e0ee8dfa5a21c112773454ee5
This commit is contained in:
Alexandre Kirszenberg 2018-11-12 08:47:02 -08:00 committed by Facebook Github Bot
parent bea57d871f
commit c787866d64
1 changed files with 21 additions and 1 deletions

View File

@ -89,7 +89,27 @@ Error: ${e.message}`;
hmrClient.on('error', data => { hmrClient.on('error', data => {
HMRLoadingView.hide(); HMRLoadingView.hide();
throw new Error(`${data.type} ${data.message}`);
if (data.type === 'GraphNotFoundError') {
hmrClient.disable();
throw new Error(
'The packager server has restarted since the last Hot update. Hot Reloading will be disabled until you reload the application.',
);
} else if (data.type === 'RevisionNotFoundError') {
hmrClient.disable();
throw new Error(
'The packager server and the client are out of sync. Hot Reloading will be disabled until you reload the application.',
);
} else {
throw new Error(`${data.type} ${data.message}`);
}
});
hmrClient.on('close', data => {
HMRLoadingView.hide();
throw new Error(
'Disconnected from the packager server. Hot Reloading will be disabled until you reload the application.',
);
}); });
hmrClient.enable(); hmrClient.enable();