Skip to content

Commit

Permalink
[ReactDebugTools] add custom error type for future new hooks (#24168)
Browse files Browse the repository at this point in the history
* [ReactDebugTools] add custom error type for future new hooks

* update per review comments

* remove unused argument
  • Loading branch information
mondaychen authored Mar 30, 2022
1 parent 8b95ea2 commit 0415b18
Showing 1 changed file with 19 additions and 2 deletions.
21 changes: 19 additions & 2 deletions packages/react-debug-tools/src/ReactDebugHooks.js
Original file line number Diff line number Diff line change
Expand Up @@ -356,6 +356,23 @@ const Dispatcher: DispatcherType = {
useId,
};

// create a proxy to throw a custom error
// in case future versions of React adds more hooks
const DispatcherProxyHandler = {
get(target, prop) {
if (target.hasOwnProperty(prop)) {
return target[prop];
}
const error = new Error('Missing method in Dispatcher: ' + prop);
// Note: This error name needs to stay in sync with react-devtools-shared
// TODO: refactor this if we ever combine the devtools and debug tools packages
error.name = 'UnsupportedFeatureError';
throw error;
},
};

const DispatcherProxy = new Proxy(Dispatcher, DispatcherProxyHandler);

// Inspect

export type HookSource = {
Expand Down Expand Up @@ -664,7 +681,7 @@ export function inspectHooks<Props>(

const previousDispatcher = currentDispatcher.current;
let readHookLog;
currentDispatcher.current = Dispatcher;
currentDispatcher.current = DispatcherProxy;
let ancestorStackError;
try {
ancestorStackError = new Error();
Expand Down Expand Up @@ -708,7 +725,7 @@ function inspectHooksOfForwardRef<Props, Ref>(
): HooksTree {
const previousDispatcher = currentDispatcher.current;
let readHookLog;
currentDispatcher.current = Dispatcher;
currentDispatcher.current = DispatcherProxy;
let ancestorStackError;
try {
ancestorStackError = new Error();
Expand Down

0 comments on commit 0415b18

Please sign in to comment.