1.0.2 • Published 1 year ago

that-error v1.0.2

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

that-error

Create typed error classes. Inspired by the thiserror Rust crate.

Part of the throw-not family of packages:

Install

npm install that-error
pnpm install that-error
yarn install that-error

Example

// api-errors.ts
import { ApiError, isApiError } from 'that-error';

export const { ApiError, isApiError } = createError('ApiError', {
  bad_request: (message: string) => ({
    message,
    meta: { statusCode: 400 },
  }),
  not_found: (resourceType: string, resourceId: string) => ({
    message: `${resourceType} ${resourceId} not found`,
    meta: { statusCode: 404, resourceType, resourceId },
  }),
  custom: (statusCode: number, message: string) => ({
    message,
    meta: { statusCode },
  }),
});

// if needed you can define an instance type
export type ApiError = InstanceType<typeof ApiError>;
// index.ts
import { ApiError, isApiError } from './api-errors';

function getCustomer(id: string) {
  const customer = ...;
  if (!customer) {
    // constructors are type-checked.
    // `resourceType` and `resourceId` are required for `not_found` errors
    throw new ApiError('not_found', 'customer', id);
  }
  return customer;
}

try {
  const customer = getCustomer('cus_1234567890');
} catch (error) {
  // `error instanceof ApiError` and `error instanceof Error` will also be true
  // passing the code here is optional if you just want to check if it is an `ApiError`
  if (isApiError(error, 'not_found')) {
    // `error` will have full types. In this example:
    // error.code = 'not_found'
    // error.meta = { statusCode: 404, resourceType: 'customer', resourceId: 'cus_1234567890' }
    // error.message = 'customer cus_1234567890 not found'
  }
}