Simplified result/error handling for JavaScript.
Find a file
Anton Nesterov 849b917d50
init
2024-10-16 07:02:31 +02:00
.gitignore init 2024-10-16 07:02:31 +02:00
bun.lockb init 2024-10-16 07:02:31 +02:00
grip.test.ts init 2024-10-16 07:02:31 +02:00
grip.ts init 2024-10-16 07:02:31 +02:00
mod.ts init 2024-10-16 07:02:31 +02:00
package.json init 2024-10-16 07:02:31 +02:00
README.md init 2024-10-16 07:02:31 +02:00
tsconfig.json init 2024-10-16 07:02:31 +02:00

Grip

Simplified result/error handling for JavaScript. Grip always returns a consistent call result ready to be handled. It makes the control flow similar to that of Golang, but doesn't force you to make additional null checks or create transitional variables to hold error results.

Install

bun add github:nesterow/grip

Usage

The grip function accepts a function or a promise and returns a result with return value and status. The result can be hadled as either an object or a tuple.

import { grip } from '@nesterow/grip';

Handle result as an object:

The result can be handled as an object: {value, status, Ok(), Fail(), Of(type)}

const fetchResult = await grip(
  fetch('https://api.example.com')
);

if (fetchResult.Fail()) {
    handleErrorProperly();
    return;
}

const jsonResult = await grip(
  res.value.json()
);

if (jsonResult.Of(SyntaxError)) {
    handleJsonParseError();
    return;
}

Handle result as a tuple:

The result can also be received as a tuple if you want to handle errors in Go'ish style:

const [response, fetchStatus] = await grip(
  fetch('https://api.example.com')
);
if (fetchStatus.Fail()) {
    handleErrorProperly();
    return;
}

const [json, parseStatus] = await grip(
  response.json()
);
if (parseStatus.Of(SyntaxError)) {
    handleJsonParseError();
    return;
}

License

MIT