'use strict' const constructors = new Map([ [Error.name, Error], [EvalError.name, EvalError], [RangeError.name, RangeError], [ReferenceError.name, ReferenceError], [SyntaxError.name, SyntaxError], [TypeError.name, TypeError], [URIError.name, URIError] ]) exports.deserialize = function (error) { if (error && error.__ELECTRON_SERIALIZED_ERROR__ && constructors.has(error.name)) { const constructor = constructors.get(error.name) const deserializedError = new constructor(error.message) deserializedError.stack = error.stack deserializedError.from = error.from deserializedError.cause = exports.deserialize(error.cause) return deserializedError } return error } exports.serialize = function (error) { if (error instanceof Error) { // Errors get lost, because: JSON.stringify(new Error('Message')) === {} // Take the serializable properties and construct a generic object return { message: error.message, stack: error.stack, name: error.name, from: process.type, cause: exports.serialize(error.cause), __ELECTRON_SERIALIZED_ERROR__: true } } return error }