1.0.9 • Published 7 months ago

cope v1.0.9

Weekly downloads
3
License
ISC
Repository
github
Last release
7 months ago

👐 cope

Simple helper to handle errors, inspired by Golang solution

💿 Installation

pnpm i cope
npm i cope
yarn add cope

❓ Why

  • Simplicity: Avoid try/catch blocks scattered across your code
  • Type Safety: You know exactly what types to expect in success and failure cases
  • Consistency: Standardized structure for handling errors in sync and async code

💡 Examples

Basic usage:

import { cope } from 'cope';

const [result, error] = cope(() => JSON.parse('{"a": 123}'));

if (error)
  // process error
else
  // process result

Usage with default:

const [result = {count: 0}, error] = cope(() => JSON.parse('_broken_"count": 123}'));
if (error)
  console.warn('fail')

// result is always defined

!NOTE
This is why, the util returns undefined instead of null

Usage with optional execution:

cope(() => window.querySelector('#dynamic-element').scrollTo(123, 0))
// ...guaranteed executions

Asynchronous usage:

Stepwise

const [fetchResult, fetchingError] = await cope(() => fetch('https://example.com'));
if (fetchingError) {
  console.error('Request failed')
  return
}

const [result = null, parsingError] = await cope(() => fetchResult.json());
if (parsingError)
  console.warn('Cannot parse response data')

// process result

Or just

const [result = null, error] = await cope(
  () => fetch('https://example.com')).then(d=>d.json())
);
if (error) {
  console.error('Somewhere failed 🌚')
  return
}

// process result

🛠️ API

cope<Throws, Executor, Result>(executor: Executor): CopeResult<Result, Throws>
  • Generics

    • Throws - You can define types of errors, that can be thrown by executor. Default is Error
    • Executor - Private, don't change it!
    • Result - Private, don't change it!
  • Parameters

    • executor (Function): The function to be executed. It can be either a synchronous or asynchronous function.
  • Returns

1.0.2

7 months ago

1.0.9

7 months ago

1.0.8

7 months ago

1.0.7

7 months ago

1.0.6

7 months ago

1.0.4

7 months ago

1.0.3

7 months ago

1.0.1

9 years ago

1.0.0

9 years ago

0.1.3

11 years ago

0.1.2

11 years ago

0.1.1

11 years ago

0.1.0

11 years ago

0.0.4

11 years ago

0.0.3

11 years ago

0.0.2

11 years ago

0.0.1

11 years ago