diff --git a/packages/react-devtools-shared/src/__tests__/backend/utils-test.js b/packages/react-devtools-shared/src/__tests__/backend/utils-test.js deleted file mode 100644 index a6a050d8b3582..0000000000000 --- a/packages/react-devtools-shared/src/__tests__/backend/utils-test.js +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Copyright (c) Facebook, 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 {getSerializableData} from 'react-devtools-shared/src/backend/utils'; - -describe('backend/utils', () => { - describe('getSerializableData', () => { - it('should return null if data is null', () => { - expect(getSerializableData(null)).toEqual(null); - }); - - it('should return undefined if data is undefined', () => { - expect(getSerializableData(undefined)).toEqual(undefined); - }); - - it('should return string if data is string', () => { - expect(getSerializableData('react')).toEqual('react'); - }); - - it('should return number if data is number', () => { - expect(getSerializableData(123)).toEqual(123); - }); - - it('should return array object if data is array object', () => { - expect(getSerializableData([{name: 'react'}])).toEqual([{name: 'react'}]); - }); - - it('should return object if data is object', () => { - expect(getSerializableData({name: 'react'})).toEqual({name: 'react'}); - }); - - it('should return string with suffix n if data is BigInt', () => { - // eslint-disable-next-line no-undef - expect(getSerializableData(BigInt('123'))).toEqual('123n'); - }); - }); -}); diff --git a/packages/react-devtools-shared/src/backend/utils.js b/packages/react-devtools-shared/src/backend/utils.js index 10380f6d848c0..5c6a151e39f52 100644 --- a/packages/react-devtools-shared/src/backend/utils.js +++ b/packages/react-devtools-shared/src/backend/utils.js @@ -11,29 +11,6 @@ import {dehydrate} from '../hydration'; import type {DehydratedData} from 'react-devtools-shared/src/devtools/views/Components/types'; -export function getSerializableData(data: any) { - if (data === null) { - return data; - } - // $FlowFixMe - if (typeof data === 'bigint') { - return data.toString() + 'n'; - } - if (Array.isArray(data)) { - return data.reduce(function(acc, val) { - acc.push(getSerializableData(val)); - return acc; - }, []); - } - if (typeof data === 'object') { - return Object.keys(data).reduce(function(acc, key) { - acc[key] = getSerializableData(data[key]); - return acc; - }, {}); - } - return data; -} - export function cleanForBridge( data: Object | null, isPathWhitelisted: (path: Array) => boolean, @@ -49,7 +26,7 @@ export function cleanForBridge( path, isPathWhitelisted, ); - + console.log(cleanedData); return { data: cleanedData, cleaned: cleanedPaths, diff --git a/packages/react-devtools-shared/src/devtools/views/utils.js b/packages/react-devtools-shared/src/devtools/views/utils.js index 247f860ac6273..e52bedbace49b 100644 --- a/packages/react-devtools-shared/src/devtools/views/utils.js +++ b/packages/react-devtools-shared/src/devtools/views/utils.js @@ -107,6 +107,8 @@ export function getMetaValueLabel(data: Object): string | null { case 'date': case 'symbol': return name; + case 'bigint': + return `${name}n`; case 'iterator': return `${name}(…)`; case 'array_buffer': diff --git a/packages/react-devtools-shared/src/hydration.js b/packages/react-devtools-shared/src/hydration.js index 6624041d0d345..a4ddf7f84ffce 100644 --- a/packages/react-devtools-shared/src/hydration.js +++ b/packages/react-devtools-shared/src/hydration.js @@ -69,6 +69,7 @@ const LEVEL_THRESHOLD = 2; type PropType = | 'array' | 'array_buffer' + | 'bigint' | 'boolean' | 'data_view' | 'date' @@ -107,6 +108,8 @@ function getDataType(data: Object): PropType { const type = typeof data; switch (type) { + case 'bigint': + return 'bigint'; case 'boolean': return 'boolean'; case 'function': @@ -231,6 +234,14 @@ export function dehydrate( case 'string': return data.length <= 500 ? data : data.slice(0, 500) + '...'; + case 'bigint': + cleaned.push(path); + return { + inspectable: false, + name: data.toString(), + type, + }; + case 'symbol': cleaned.push(path); return {