0.3.0 • Published 5 years ago

ts-box v0.3.0

Weekly downloads
3
License
ISC
Repository
github
Last release
5 years ago

📦 ts-box

Put exceptions into boxes.

In JavaScript and therefor in TypeScript any function can throw anything at any time. This makes exception handling hard. ts-box is a workaround which puts function return values into boxes (like a maybe monad) and forces users to check for the error at the type level before the actual value can be accessed.

Install

npm install ts-box

Usage

Use boxify() to boxify existing functions

import {boxify} from "ts-box";

// Make a version of fetch that never throws exceptions
const boxedFetch = boxify(fetch);

async function main() {
    const box = await boxedFetch("/api");

    if (!box.ok) {
        console.log("Fetch failed", box.error);
        return;
    }

    // The value can be accessed only when the error is handled
    console.log("Fetch ok!", box.value.status);
}

Use runBox() to immediately execute a function with boxing

import {runBox} from "ts-box";
const jsonBox = runBox(() => box.value.json());
if (jsonBox.ok) {
    // jsonBox.value...
}

Use boxifyObject() to boxify object of functions

import {boxifyObject} from "ts-box";
import Axiox from "axios";

const BoxifiedAxios = boxifyObject(Axios);

The return type

The return type of a boxified function is always a discriminated union ResultBox with a common ok singleton property as the discriminant which can be used to narrow the type to the value or error.

type ResultBox<T> = {ok: true; value: T} | {ok: false; error: any};

Read more about the TypeScript discriminated unions here:

https://www.typescriptlang.org/docs/handbook/advanced-types.html#discriminated-unions

0.3.0

5 years ago

0.2.1

5 years ago

0.2.0

5 years ago

0.1.0

5 years ago