Skip to content

Commit cf34a74

Browse files
committed
fix: cache native view resolution failures to prevent repeated logging
When requireNativeView throws, record the failure so subsequent calls short-circuit and return null without retrying or re-logging. Previously the module-level cache stayed undefined on failure, causing every render to repeat the resolution attempt and emit duplicate console.error logs.
1 parent fb0588b commit cf34a74

2 files changed

Lines changed: 12 additions & 0 deletions

File tree

apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ export interface NativeReviewDiffViewProps extends ViewProps {
130130
}
131131

132132
let cachedNativeReviewDiffView: ComponentType<NativeReviewDiffViewProps> | undefined;
133+
let reviewDiffResolutionFailed = false;
133134

134135
function getExpoViewConfig(moduleName: string) {
135136
return (globalThis as typeof globalThis & ExpoGlobalWithViewConfig).expo?.getViewConfig?.(
@@ -142,6 +143,10 @@ export function resolveNativeReviewDiffView(): ComponentType<NativeReviewDiffVie
142143
return cachedNativeReviewDiffView;
143144
}
144145

146+
if (reviewDiffResolutionFailed) {
147+
return null;
148+
}
149+
145150
if (getExpoViewConfig(NATIVE_REVIEW_DIFF_MODULE_NAME) == null) {
146151
return null;
147152
}
@@ -151,6 +156,7 @@ export function resolveNativeReviewDiffView(): ComponentType<NativeReviewDiffVie
151156
NATIVE_REVIEW_DIFF_MODULE_NAME,
152157
);
153158
} catch (cause) {
159+
reviewDiffResolutionFailed = true;
154160
console.error(
155161
new NativeViewResolutionError({
156162
nativeModuleName: NATIVE_REVIEW_DIFF_MODULE_NAME,

apps/mobile/src/features/terminal/nativeTerminalModule.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ export interface NativeTerminalSurfaceProps extends ViewProps {
3535
}
3636

3737
let cachedNativeTerminalSurfaceView: ComponentType<NativeTerminalSurfaceProps> | undefined;
38+
let terminalResolutionFailed = false;
3839

3940
function getExpoViewConfig(moduleName: string) {
4041
return (globalThis as typeof globalThis & ExpoGlobalWithViewConfig).expo?.getViewConfig?.(
@@ -47,6 +48,10 @@ export function resolveNativeTerminalSurfaceView(): ComponentType<NativeTerminal
4748
return cachedNativeTerminalSurfaceView;
4849
}
4950

51+
if (terminalResolutionFailed) {
52+
return null;
53+
}
54+
5055
if (getExpoViewConfig(NATIVE_TERMINAL_MODULE_NAME) == null) {
5156
return null;
5257
}
@@ -56,6 +61,7 @@ export function resolveNativeTerminalSurfaceView(): ComponentType<NativeTerminal
5661
NATIVE_TERMINAL_MODULE_NAME,
5762
);
5863
} catch (cause) {
64+
terminalResolutionFailed = true;
5965
console.error(
6066
new NativeViewResolutionError({
6167
nativeModuleName: NATIVE_TERMINAL_MODULE_NAME,

0 commit comments

Comments
 (0)