CHAN.RUN

ensure

fromJSON

fromJSON()

function fromJSON(data, registry): Error;

Defined in: src/serialize.ts

Deserialize a plain object back into a FaultError instance. Requires a registry mapping names to error classes.

const registry = { NotFoundError, DbError };
const err = fromJSON(json, registry);
// err instanceof NotFoundError === true

Returns a generic Error if the name isn't in the registry.

Parameters

ParameterType
dataFaultErrorJSON
registryRecord<string, FaultErrorClass>

Returns

Error

Examples

const registry = { ValidationError, NotFoundError, RateLimitError };

async function apiCall(url: string) {
  const res = await fetch(url);
  if (!res.ok) {
    const body = await res.json();
    throw fromJSON(body.error, registry);
    // Throws a real NotFoundError instance, matchable with match()
  }
  return res.json();
}
const registry = { PaymentFailedError, OrderError, DbError };

queue.on("dead-letter", (msg) => {
  const error = fromJSON(msg.error, registry);
  match(error, {
    PaymentFailedError: (e) => retryPayment(msg.orderId),
    _: (e) => logger.error("Unrecoverable", { error: e }),
  });
});
const json: FaultErrorJSON = {
  name: "NotFoundError",
  code: "NotFoundError",
  message: "User not found",
};
const err = fromJSON(json, { NotFoundError });

expect(err).toBeInstanceOf(NotFoundError);
expect(err.message).toBe("User not found");