Skip to content

[Bug] Error is not stringified #77

@ghengeveld

Description

@ghengeveld

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions