Skip to content

Commit cfbfa89

Browse files
committed
[DevTools] Display RegExp values in props/state
Previously, when props/state contained a regexp, it was shown as an empty object. This commit adds regexps as values in need of special rehydration (like Symbols or TypedArrays), and display them as a user might expect.
1 parent 4bc52ef commit cfbfa89

File tree

4 files changed

+19
-0
lines changed

4 files changed

+19
-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
@@ -503,6 +503,7 @@ exports[`InspectedElementContext should support complex data types: 1: Inspected
503503
"1": {}
504504
},
505505
"react_element": {},
506+
"regexp": {},
506507
"set": {
507508
"0": "abc",
508509
"1": 123

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,7 @@ describe('InspectedElementContext', () => {
539539
map={mapShallow}
540540
map_of_maps={mapOfMaps}
541541
react_element={<span />}
542+
regexp={/abc/giu}
542543
set={setShallow}
543544
set_of_sets={setOfSets}
544545
symbol={Symbol('symbol')}
@@ -584,6 +585,7 @@ describe('InspectedElementContext', () => {
584585
map,
585586
map_of_maps,
586587
react_element,
588+
regexp,
587589
set,
588590
set_of_sets,
589591
symbol,
@@ -624,6 +626,10 @@ describe('InspectedElementContext', () => {
624626
expect(react_element[meta.name]).toBe('span');
625627
expect(react_element[meta.type]).toBe('react_element');
626628

629+
expect(regexp[meta.inspectable]).toBe(false);
630+
expect(regexp[meta.name]).toBe('/abc/giu');
631+
expect(regexp[meta.type]).toBe('regexp');
632+
627633
expect(set[meta.inspectable]).toBeUndefined(); // Complex type
628634
expect(set[meta.name]).toBe('Set');
629635
expect(set[meta.type]).toBe('iterator');

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ export function getMetaValueLabel(data: Object): string | null {
105105
case 'object':
106106
return 'Object';
107107
case 'date':
108+
case 'regexp':
108109
case 'symbol':
109110
return name;
110111
case 'iterator':

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ type PropType =
8181
| 'number'
8282
| 'object'
8383
| 'react_element'
84+
| 'regexp'
8485
| 'string'
8586
| 'symbol'
8687
| 'typed_array'
@@ -128,6 +129,8 @@ function getDataType(data: Object): PropType {
128129
return 'array_buffer';
129130
} else if (typeof data[Symbol.iterator] === 'function') {
130131
return 'iterator';
132+
} else if (data instanceof RegExp) {
133+
return 'regexp';
131134
} else if (Object.prototype.toString.call(data) === '[object Date]') {
132135
return 'date';
133136
}
@@ -324,6 +327,14 @@ export function dehydrate(
324327
type,
325328
};
326329

330+
case 'regexp':
331+
cleaned.push(path);
332+
return {
333+
inspectable: false,
334+
name: data.toString(),
335+
type,
336+
};
337+
327338
case 'object':
328339
isPathWhitelistedCheck = isPathWhitelisted(path);
329340
if (level >= LEVEL_THRESHOLD && !isPathWhitelistedCheck) {

0 commit comments

Comments
 (0)