JSFiddle - React, Tailwind, and code Playground

by Hemanth HM

JavaScript

function createError() {
  let globalError = globalThis.Error;
  // Extending the native Error for devtools formatting (stacktrace,
  // categorization). Not required by the spec.
  const klass = class extends globalError {
    constructor(message, cause) {
      super(message);
      if (Error.captureStackTrace) {
        Error.captureStackTrace(this, klass);
      }
      if (message !== undefined) {
        Object.defineProperty(this, 'message', {
          writable: true,
          configurable: true,
          enumerable: false,
          value: message,
        });
      }
      if (cause !== undefined) {
        Object.defineProperty(this, 'cause', {
          writable: true,
          configurable: true,
          enumerable: false,
          value: cause,
        });
      }
    }
  };
  Object.defineProperty(klass, 'name', {
    writable: false,
    enumerable: false,
    configurable: true,
    value: 'Error',
  });
  Object.defineProperties(klass.prototype, {
    cause: {
      writable: true,
      enumerable: false,
      configurable: true,
      value: undefined,
    },
    name: {
      writable: true,
      enumerable: false,
      configurable: true,
      value: 'Error',
    },
    message: {
      writable: true,
      enumerable: false,
      configurable: true,
      value: '',
    },
  });
  return klass;
}

globalThis.Error = createError();

const err = new Error("Request Error", "Expected a JSON got a string!");

console.log({casuse:err.cause, message:err.message})