ErrorObjectSerializer.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. */
  4. "use strict";
  5. /** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
  6. /** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
  7. /** @typedef {Error & { cause?: unknown }} ErrorWithCause */
  8. class ErrorObjectSerializer {
  9. /**
  10. * Creates an instance of ErrorObjectSerializer.
  11. * @param {ErrorConstructor | EvalErrorConstructor | RangeErrorConstructor | ReferenceErrorConstructor | SyntaxErrorConstructor | TypeErrorConstructor} Type error type
  12. */
  13. constructor(Type) {
  14. this.Type = Type;
  15. }
  16. /**
  17. * Serializes this instance into the provided serializer context.
  18. * @param {Error | EvalError | RangeError | ReferenceError | SyntaxError | TypeError} obj error
  19. * @param {ObjectSerializerContext} context context
  20. */
  21. serialize(obj, context) {
  22. context.write(obj.message);
  23. context.write(obj.stack);
  24. context.write(
  25. /** @type {ErrorWithCause} */
  26. (obj).cause
  27. );
  28. }
  29. /**
  30. * Restores this instance from the provided deserializer context.
  31. * @param {ObjectDeserializerContext} context context
  32. * @returns {Error | EvalError | RangeError | ReferenceError | SyntaxError | TypeError} error
  33. */
  34. deserialize(context) {
  35. const err = new this.Type();
  36. err.message = context.read();
  37. err.stack = context.read();
  38. /** @type {ErrorWithCause} */
  39. (err).cause = context.read();
  40. return err;
  41. }
  42. }
  43. module.exports = ErrorObjectSerializer;