AggregateErrorSerializer.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  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, errors: EXPECTED_ANY[] }} AggregateError */
  8. class AggregateErrorSerializer {
  9. /**
  10. * @param {AggregateError} obj error
  11. * @param {ObjectSerializerContext} context context
  12. */
  13. serialize(obj, context) {
  14. context.write(obj.errors);
  15. context.write(obj.message);
  16. context.write(obj.stack);
  17. context.write(obj.cause);
  18. }
  19. /**
  20. * @param {ObjectDeserializerContext} context context
  21. * @returns {AggregateError} error
  22. */
  23. deserialize(context) {
  24. const errors = context.read();
  25. // @ts-expect-error ES2018 doesn't `AggregateError`, but it can be used by developers
  26. // eslint-disable-next-line n/no-unsupported-features/es-builtins, n/no-unsupported-features/es-syntax, unicorn/error-message
  27. const err = new AggregateError(errors);
  28. err.message = context.read();
  29. err.stack = context.read();
  30. err.cause = context.read();
  31. return err;
  32. }
  33. }
  34. module.exports = AggregateErrorSerializer;