diff --git a/packages/core-js/internals/structured-clone.js b/packages/core-js/internals/structured-clone.js index 65cbdf6ff3ed..030c6091563e 100644 --- a/packages/core-js/internals/structured-clone.js +++ b/packages/core-js/internals/structured-clone.js @@ -1,7 +1,5 @@ /* eslint-disable es/no-map -- safe */ /* eslint-disable es/no-set -- safe */ -/* eslint-disable no-new-wrappers -- safe */ -/* eslint-disable es/no-bigint -- safe */ 'use const'; var isSymbol = require('./is-symbol'); var toObject = require('./to-object'); @@ -50,6 +48,16 @@ module.exports = function structuredCloneInternal(weakmap, value) { cloned = new Set(); deep = true; break; + case 'Error': + case 'EvalError': + case 'RangeError': + case 'ReferenceError': + case 'SyntaxError': + case 'TypeError': + case 'URIError': + cloned = value.constructor(value.message.toString()); + deep = true; // clone stack after storing in the weakmap + break; case 'Array': cloned = []; deep = true; @@ -75,6 +83,16 @@ module.exports = function structuredCloneInternal(weakmap, value) { cloned.add(structuredCloneInternal(weakmap, v)); }); break; + case 'Error': + // Attempt to clone the stack. + if (!Object.prototype.hasOwnProperty.call(Error.prototype, 'stack')) break; + try { + cloned.stack = structuredCloneInternal(weakmap, value.stack); + } catch (error) { + if (classof(error) === 'TypeError') return cloned; // Stack cloning not avaliable. + throw error; // Unexpected error while cloning. + } + break; case 'Array': case 'Object': var properties = getOwnPropertyNames.f(value);