/** * Copyright (c) Meta Platforms, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @flow */ import type {ConsolePatchSettings} from 'react-devtools-shared/src/backend/types'; import {writeConsolePatchSettingsToWindow} from 'react-devtools-shared/src/backend/console'; import {castBool, castBrowserTheme} from 'react-devtools-shared/src/utils'; // Note: all keys should be optional in this type, because users can use newer // versions of React DevTools with older versions of React Native, and the object // provided by React Native may not include all of this type's fields. export type DevToolsSettingsManager = { getConsolePatchSettings: ?() => string, setConsolePatchSettings: ?(key: string) => void, }; export function initializeUsingCachedSettings( devToolsSettingsManager: DevToolsSettingsManager, ) { initializeConsolePatchSettings(devToolsSettingsManager); } function initializeConsolePatchSettings( devToolsSettingsManager: DevToolsSettingsManager, ) { if (devToolsSettingsManager.getConsolePatchSettings == null) { return; } const consolePatchSettingsString = devToolsSettingsManager.getConsolePatchSettings(); if (consolePatchSettingsString == null) { return; } const parsedConsolePatchSettings = parseConsolePatchSettings( consolePatchSettingsString, ); if (parsedConsolePatchSettings == null) { return; } writeConsolePatchSettingsToWindow(parsedConsolePatchSettings); } function parseConsolePatchSettings( consolePatchSettingsString: string, ): ?ConsolePatchSettings { const parsedValue = JSON.parse(consolePatchSettingsString ?? '{}'); const { appendComponentStack, breakOnConsoleErrors, showInlineWarningsAndErrors, hideConsoleLogsInStrictMode, browserTheme, } = parsedValue; return { appendComponentStack: castBool(appendComponentStack) ?? true, breakOnConsoleErrors: castBool(breakOnConsoleErrors) ?? false, showInlineWarningsAndErrors: castBool(showInlineWarningsAndErrors) ?? true, hideConsoleLogsInStrictMode: castBool(hideConsoleLogsInStrictMode) ?? false, browserTheme: castBrowserTheme(browserTheme) ?? 'dark', }; } export function cacheConsolePatchSettings( devToolsSettingsManager: DevToolsSettingsManager, value: ConsolePatchSettings, ): void { if (devToolsSettingsManager.setConsolePatchSettings == null) { return; } devToolsSettingsManager.setConsolePatchSettings(JSON.stringify(value)); }