async-streamify
Version:
Stream and serialize nested promises and async iterables over HTTP, workers, etc
41 lines (40 loc) • 1.15 kB
JavaScript
export const name = "error";
export function testNative(target) {
return target instanceof Error;
}
export function serialize(target) {
/*
// consider something like: (for additional properties?)
Object.getOwnPropertyNames(value).forEach(function (propName) {
error[propName] = value[propName];
});
//
*/
return {
$error: {
name: target.name,
message: target.message,
stack: target.stack,
},
};
}
export function maybeSerialize(target) {
return testNative(target) ? serialize(target) : target;
}
export function testSerialized(target) {
return typeof target === "object" && target !== null &&
Object.keys(target).length === 1 && "$error" in target;
}
export function deserialize(serialized) {
const $error = serialized.$error;
const error = new Error($error.message);
error.name = $error.name;
if ($error.stack)
error.stack = $error.stack;
return error;
}
export function maybeDeserialize(serialized) {
return testSerialized(serialized)
? deserialize(serialized)
: serialized;
}