Skip to content

Commit

Permalink
Clearer HMR error messages
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Alexandre Kirszenberg authored and facebook-github-bot committed Nov 12, 2018
1 parent bea57d8 commit c787866
Showing 1 changed file with 21 additions and 1 deletion.
22 changes: 21 additions & 1 deletion Libraries/Utilities/HMRClient.js
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,27 @@ Error: ${e.message}`;

hmrClient.on('error', data => {
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();
Expand Down

0 comments on commit c787866

Please sign in to comment.