-
Notifications
You must be signed in to change notification settings - Fork 28
Open
Labels
bugSomething isn't workingSomething isn't working
Description
Describe the bug
Stringifying an Error instance will yield "{}".
Steps to reproduce the behavior
import { stringify, parse } from "telejson";
const error = new Error("Oops");
const string = stringify(error);
console.log({ string }); // => { string: "{}" }
const parsed = parse(string);
console.log(parsed); // => {}https://codesandbox.io/s/delicate-fire-dto12?file=/src/index.js
Expected behavior
A stringified Error should look like:
{ "name": "CustomError", "message": "Oops", "stack": "CustomError: Oops\n at <anonymous>:1:1" }
Parsing this should yield an Error instance with these properties restored.
const { name, message, stack } = JSON.parse(string); // or something safer
const error = new Error(message);
Object.defineProperty(error, 'name', { value: name });
Object.defineProperty(error, 'stack', { value: stack });This doesn't yield the original CustomError class instance, but I suppose it's better to not attempt to restore that since it may have other custom properties or methods which we won't be able to restore anyway.
Workaround
const error = new Error("Oops");
const { name, message, stack } = error;
const e = { name, message, stack };However this doesn't yield an Error instance, just a plain object.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working