@internetarchive/result-type
TypeScript icon, indicating that this package has built-in type declarations

0.0.1 • Public • Published

[Build Status) codecov

IAUX Result Type

A generic Result interface for returning type-safe responses and errors.

Installation

> yarn add @internetarchive/result-type

Usage

Result

Result is a generic interface for returning a response with typesafe value and error handling.

import { Result } from '@internetarchive/result-type';

enum FooErrorType {
  networkError,
  decodingError,
}

class FooError extends Error {
  type?: FooErrorType;

  constructor(type: FooErrorType, message: string?) {
    super(message);
    this.type = type;
  }
}

// success
const result: Result<string, FooError> = { success: 'foo' };

const value = result.success;
if (value) {
  console.debug('do something with `value`');
}

// error
const result: Result<string, FooError> = {
  error: new FooError(FooErrorType.decodingError),
};

if (result.error) {
  switch (result.error) {
    case FooErrorType.networkError:
      console.debug('handle network error');
      break;
    case FooErrorType.decodingError:
      console.debug('handle decoding error');
      break;
    default:
      console.debug('unknown error');
  }
}

Local Demo with web-dev-server

yarn start

To run a local development server that serves the basic demo located in demo/index.html

Testing with Web Test Runner

To run the suite of Web Test Runner tests, run

yarn run test

To run the tests in watch mode (for <abbr title="test driven development">TDD</abbr>, for example), run

yarn run test:watch

Linting with ESLint, Prettier, and Types

To scan the project for linting errors, run

yarn run lint

You can lint with ESLint and Prettier individually as well

yarn run lint:eslint
yarn run lint:prettier

To automatically fix many linting errors, run

yarn run format

You can format using ESLint and Prettier individually as well

yarn run format:eslint
yarn run format:prettier

Tooling configs

For most of the tools, the configuration is in the package.json to reduce the amount of files in your project.

If you customize the configuration a lot, you can consider moving them to individual files.

Readme

Keywords

none

Package Sidebar

Install

npm i @internetarchive/result-type

Weekly Downloads

47

Version

0.0.1

License

AGPL-3.0-only

Unpacked Size

51 kB

Total Files

28

Last publish

Collaborators

  • jeffwklein
  • jim-at-ia
  • tracey.pooh
  • latonv
  • markcarranza
  • ibnesayeed
  • bfalling
  • mitraardron
  • vbanos
  • kngenie
  • iisa
  • cdrini
  • nsharma123
  • dualcnhq