throwable-error
TypeScript icon, indicating that this package has built-in type declarations

0.1.1 • Public • Published

throwable-error

NPM

🧨 Efficient, multi-inheritant, dynamically-generated, Error pseudo-classes with instanceof super-powers.

This project is written in Typescript but can be used both as an ES module or CJS module.

Notice

This project is in beta stage, major API modifications and simplifications are very likely to occur in upcoming major releases.

Install

npm install --save throwable-error

Usage

Main concept.

  • Errors are generally defined in the main scope of the application.
  • You can use the getThrowableError method to generate a pseudo-class by providing an errorName and a mapperFunction.
  • The mapperFunction basically receives the new Error constructor arguments and returns them with the proper internal object structure the Error will have: The "inner" constructor of this library will incorporate returned values as properties in the new generated Error pseudo-class.

getThrowableError

Function getThrowableError(name, { mapperFn?, extendFrom? })

Get an efficient, multi-inheritant, dynamically-generated, Error pseudo-class with instanceof super-powers.

Parameters

Name Type Description
name string Class name.
mapperFn MapperFunctionType<any> Mapper function for the constructor arguments.
extendFrom ExtendFromType<any> Class to extend from.

Returns

The new Error pseudo-class with type ThrowableErrorConstructor<A, ThrowableError>

Type parameters

Name Type Description
A A: ThrowableErrorConstructorArguments = ThrowableErrorConstructorArguments Constructor arguments.

Examples

Note: The ThrowableErrorConstructorArguments type already includes the originalError property on its declaration.

Simple example:

const WebSocketError = getThrowableError(
  'WebSocketError',
  (userMessage: string, details?: { originalError?: Error }) => ({
    userMessage,
    originalError: details?.originalError || undefined,
  }),
);

Inheritant example (new error extending from WebSocketError in previous example:

const WebSocketJSONError = getThrowableError<
  'WebSocketJSONError',
  ThrowableErrorConstructorArguments & [string, { data: any }]
  >(
    'WebSocketJSONError',
    (userMessage: string, details?: { originalError?: Error; data?: any }) => ({
      userMessage,
      originalError: details?.originalError || undefined,
      data: details?.data || undefined,
    }),
   WebSocketError,
  );

Throwing these errors is straightforward

throw new WebSocketError('Unable to connect');

throw new WebSocketError('Unable to connect', {
  originalError: new Error('test'),
});

throw new WebSocketJSONError('Unable to parse content');

throw new WebSocketJSONError('Unable to parse content', {
  originalError: new Error('test'),
});

throw new WebSocketJSONError('Unable to parse content', {
  data: '1234errorjsoncontent',
  originalError: new Error('test'),
});

Instanceof properties:

import {ThrowableError} from 'throwable-error';

const testErr = new WebSocketJSONError('test');

console.log(testErr instanceof WebSocketJSONError); # true
console.log(testErr instanceof WebSocketError); # true
console.log(testErr instanceof ThrowableError); # true

Readme

Keywords

none

Package Sidebar

Install

npm i throwable-error

Weekly Downloads

2

Version

0.1.1

License

MIT

Unpacked Size

26.2 kB

Total Files

16

Last publish

Collaborators

  • jduarter