Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Read constructor name more carefully #29954

Merged
merged 4 commits into from
Jun 25, 2024
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Check typeof constructor.name rather than attempting structuredClone
  • Loading branch information
LoganDark authored Jun 25, 2024
commit c12e7204b20a3838240b78b9eb4a8c8d7a9fa2a0
24 changes: 3 additions & 21 deletions packages/react-devtools-shared/src/hydration.js
Original file line number Diff line number Diff line change
Expand Up @@ -84,17 +84,11 @@ function createDehydrated(
preview_long: formatDataForPreview(data, true),
preview_short: formatDataForPreview(data, false),
name:
typeof data.constructor !== 'function' || data.constructor.name === 'Object'
typeof data.constructor !== 'function' || typeof data.constructor.name !== 'string' || data.constructor.name === 'Object'
? ''
: data.constructor.name,
};

try {
structuredClone(dehydrated.name);
} catch (_) {
dehydrated.name = '';
}

if (type === 'array' || type === 'typed_array') {
dehydrated.size = data.length;
} else if (type === 'object') {
Expand Down Expand Up @@ -246,17 +240,11 @@ export function dehydrate(
preview_short: formatDataForPreview(data, false),
preview_long: formatDataForPreview(data, true),
name:
typeof data.constructor !== 'function' || data.constructor.name === 'Object'
typeof data.constructor !== 'function' || typeof data.constructor.name !== 'string' || data.constructor.name === 'Object'
? ''
: data.constructor.name,
};

try {
structuredClone(unserializableValue.name);
} catch (_) {
unserializableValue.name = '';
}

// TRICKY
// Don't use [...spread] syntax for this purpose.
// This project uses @babel/plugin-transform-spread in "loose" mode which only works with Array values.
Expand Down Expand Up @@ -344,15 +332,9 @@ export function dehydrate(
readonly: true,
preview_short: formatDataForPreview(data, false),
preview_long: formatDataForPreview(data, true),
name: typeof data.constructor === 'function' ? data.constructor.name : '',
name: typeof data.constructor === 'function' && typeof data.constructor.name === 'string' ? data.constructor.name : '',
};

try {
structuredClone(value.name);
} catch (_) {
value.name = '';
}

getAllEnumerableKeys(data).forEach(key => {
const keyAsString = key.toString();

Expand Down