Skip to content

Commit ae2f4f8

Browse files
nutboltutrueadm
authored andcommitted
fix: make serializable data in react-devtools (facebook#17233)
* fix: make serializable data for bridge in react-devtools * fix: add bigint data type in hydration * refactor: remove console.log * test: update unit tests for bigint in react-devtools
1 parent 0b0a8af commit ae2f4f8

File tree

6 files changed

+29
-0
lines changed

6 files changed

+29
-0
lines changed

packages/react-devtools-shared/src/__tests__/__snapshots__/inspectedElementContext-test.js.snap

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,7 @@ exports[`InspectedElementContext should support complex data types: 1: Inspected
486486
"hooks": null,
487487
"props": {
488488
"array_buffer": {},
489+
"big_int": {},
489490
"date": {},
490491
"fn": {},
491492
"html_element": {},

packages/react-devtools-shared/src/__tests__/inspectedElementContext-test.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -532,6 +532,8 @@ describe('InspectedElementContext', () => {
532532
ReactDOM.render(
533533
<Example
534534
array_buffer={typedArray.buffer}
535+
// eslint-disable-next-line no-undef
536+
big_int={BigInt(123)}
535537
date={new Date()}
536538
fn={exampleFunction}
537539
html_element={div}
@@ -577,6 +579,7 @@ describe('InspectedElementContext', () => {
577579

578580
const {
579581
array_buffer,
582+
big_int,
580583
date,
581584
fn,
582585
html_element,
@@ -595,6 +598,10 @@ describe('InspectedElementContext', () => {
595598
expect(array_buffer[meta.name]).toBe('ArrayBuffer');
596599
expect(array_buffer[meta.type]).toBe('array_buffer');
597600

601+
expect(big_int[meta.inspectable]).toBe(false);
602+
expect(big_int[meta.name]).toBe('123');
603+
expect(big_int[meta.type]).toBe('bigint');
604+
598605
expect(date[meta.inspectable]).toBe(false);
599606
expect(date[meta.type]).toBe('date');
600607

packages/react-devtools-shared/src/__tests__/legacy/__snapshots__/inspectElement-test.js.snap

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ Object {
127127
"hooks": null,
128128
"props": {
129129
"array_buffer": {},
130+
"big_int": {},
130131
"date": {},
131132
"fn": {},
132133
"html_element": {},

packages/react-devtools-shared/src/__tests__/legacy/inspectElement-test.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,8 @@ describe('InspectedElementContext', () => {
167167
ReactDOM.render(
168168
<Example
169169
array_buffer={typedArray.buffer}
170+
// eslint-disable-next-line no-undef
171+
big_int={BigInt(123)}
170172
date={new Date()}
171173
fn={exampleFunction}
172174
html_element={div}
@@ -190,6 +192,7 @@ describe('InspectedElementContext', () => {
190192

191193
const {
192194
array_buffer,
195+
big_int,
193196
date,
194197
fn,
195198
html_element,
@@ -208,6 +211,10 @@ describe('InspectedElementContext', () => {
208211
expect(array_buffer[meta.name]).toBe('ArrayBuffer');
209212
expect(array_buffer[meta.type]).toBe('array_buffer');
210213

214+
expect(big_int[meta.inspectable]).toBe(false);
215+
expect(big_int[meta.name]).toBe('123');
216+
expect(big_int[meta.type]).toBe('bigint');
217+
211218
expect(date[meta.inspectable]).toBe(false);
212219
expect(date[meta.type]).toBe('date');
213220

packages/react-devtools-shared/src/devtools/views/utils.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,8 @@ export function getMetaValueLabel(data: Object): string | null {
107107
case 'date':
108108
case 'symbol':
109109
return name;
110+
case 'bigint':
111+
return `${name}n`;
110112
case 'iterator':
111113
return `${name}(…)`;
112114
case 'array_buffer':

packages/react-devtools-shared/src/hydration.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ const LEVEL_THRESHOLD = 2;
6969
type PropType =
7070
| 'array'
7171
| 'array_buffer'
72+
| 'bigint'
7273
| 'boolean'
7374
| 'data_view'
7475
| 'date'
@@ -107,6 +108,8 @@ function getDataType(data: Object): PropType {
107108

108109
const type = typeof data;
109110
switch (type) {
111+
case 'bigint':
112+
return 'bigint';
110113
case 'boolean':
111114
return 'boolean';
112115
case 'function':
@@ -231,6 +234,14 @@ export function dehydrate(
231234
case 'string':
232235
return data.length <= 500 ? data : data.slice(0, 500) + '...';
233236

237+
case 'bigint':
238+
cleaned.push(path);
239+
return {
240+
inspectable: false,
241+
name: data.toString(),
242+
type,
243+
};
244+
234245
case 'symbol':
235246
cleaned.push(path);
236247
return {

0 commit comments

Comments
 (0)