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

37 lines
1.2 KiB
JavaScript
Raw Normal View History

2019-10-01 13:49:56 +00:00
'use strict';
2019-01-17 18:22:05 +00:00
const constructors = new Map([
2019-10-01 13:49:56 +00:00
[Error.name, Error],
[EvalError.name, EvalError],
[RangeError.name, RangeError],
[ReferenceError.name, ReferenceError],
[SyntaxError.name, SyntaxError],
[TypeError.name, TypeError],
[URIError.name, URIError]
]);
2019-01-17 18:22:05 +00:00
exports.deserialize = function (error) {
2019-10-01 13:49:56 +00:00
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;
};
2019-01-17 18:22:05 +00:00
exports.serialize = function (error) {
2019-10-01 13:49:56 +00:00
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
};
2019-01-17 18:22:05 +00:00
}
2019-10-01 13:49:56 +00:00
return error;
};