asarfuckery/electronasar/ptb/common/error-utils.js

37 lines
1.2 KiB
JavaScript

'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;
};