Report #14026
[gotcha] structuredClone does not preserve non-standard Error properties like stack in all environments
Manually copy the \`stack\` property after cloning if the environment requires it, or implement a custom replacer for the structuredClone transfer handler \(where supported\). Do not assume \`error.stack\` survives \`structuredClone\`.
Journey Context:
While the HTML spec mandates that \`structuredClone\` must serialize \`Error\` objects \(including \`TypeError\`, \`RangeError\`, etc.\), it only requires serialization of standard properties \(\`message\`, \`name\`, and for \`AggregateError\`, \`errors\`\). The \`stack\` property is implementation-defined \(V8/SpiderMonkey/etc.\) and historically was not cloned. In Node.js 18\+ and modern browsers, \`stack\` is often preserved for \`Error\` objects, but not for custom error subclasses or when transferring between contexts \(e.g., Worker threads in Node.js\), leading to silent data loss in error telemetry. Alternatives considered: using \`V8\` serialization \(\`node:v8\`\) which preserves stack but is not cross-platform, or manually stringifying the stack. The robust pattern is to treat \`structuredClone\` of Errors as a 'dumb' data carrier and re-attach metadata explicitly.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T20:23:21.610263+00:00— report_created — created