Skip to content

Commit

Permalink
Fix misleading crash when view config is not found (facebook#30970) (f…
Browse files Browse the repository at this point in the history
…acebook#46518)

Summary:
Pull Request resolved: facebook#46518

## Summary

When a view config can not be found, it currently errors with
`TypeError: Cannot read property 'bubblingEventTypes' of null`. Instead
invariant at the correct location and prevent further processing of the
null viewConfig to improve the error logged.

## How did you test this change?

Build and run RN playground app referencing an invalid native view
through `requireNativeComponent`.

Changelog: [General][Fixed] Improved error message when no view config is found.

DiffTrain build for commit facebook/react@26855e4.

Test Plan: Sandcastle tests

Reviewed By: jackpope

Differential Revision: D62760863

Pulled By: javache

fbshipit-source-id: c71dacc48fe8795b28840cfb3f53c1f9fc664a16
  • Loading branch information
javache authored and facebook-github-bot committed Sep 17, 2024
1 parent 6666df9 commit bca232a
Showing 1 changed file with 5 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
* @noformat
* @nolint
* @flow strict-local
* @generated SignedSource<<69d0cc554d77cddb1c779dfbdf569505>>
* @generated SignedSource<<83073425aa3f71ced2c8c51f25a25938>>
*/

'use strict';
Expand Down Expand Up @@ -94,8 +94,8 @@ export function register(name: string, callback: () => ViewConfig): string {
* This configuration will be lazy-loaded from UIManager.
*/
export function get(name: string): ViewConfig {
let viewConfig;
if (!viewConfigs.has(name)) {
let viewConfig = viewConfigs.get(name);
if (viewConfig == null) {
const callback = viewConfigCallbacks.get(name);
if (typeof callback !== 'function') {
invariant(
Expand All @@ -110,15 +110,14 @@ export function get(name: string): ViewConfig {
);
}
viewConfig = callback();
invariant(viewConfig, 'View config not found for component `%s`', name);

processEventTypes(viewConfig);
viewConfigs.set(name, viewConfig);

// Clear the callback after the config is set so that
// we don't mask any errors during registration.
viewConfigCallbacks.set(name, null);
} else {
viewConfig = viewConfigs.get(name);
}
invariant(viewConfig, 'View config not found for name %s', name);
return viewConfig;
}

0 comments on commit bca232a

Please sign in to comment.