JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 1
  • Score
    100M100P100Q24750F
  • License MIT

no more throw

Package Exports

  • renai-js
  • renai-js/package.json

Readme

Renai-js

Renai-js was created to simplify the difficult-to-see try-catch blocks.

Feature

  • Replace try-catch in typescript
  • Based on generator function ※ function*() { ... }
  • I think I got the name wrong

Why?

  • In TypeScript(or JS), when writing code, can't know which function might cause which error.
    ※ It's not really a big deal, but I just made it because I was uncomfortable.

Getting Started

First, install Renai-js using npm.

npm install --save-dev renai-js

Second, Find error throwing function in your code.

// error.ts
export function randomOops(): '+_+' {
  const { 
    random, 
    floor 
  } = Math;
  const result: 0 | 1 | 2 | 3 = floor( random() * 100 ) % 4;
  
  switch( result ) {
    case 1: throw new Error('T_T'); break;
    case 2: throw new Error('X_X'); break;
    case 3: throw new Error('U_U'); break;
    default: return '+_+';
  }
}

Third, Convert code like this

// oops.ts
import { LabeledError } from 'renai-js';

export class T_TError extends LabeledError<'T_TError'> {};
export class X_XError extends LabeledError<'X_XError'> {};
export class U_UError extends LabeledError<'U_UError'> {};

export function* randomOops(): '+_+' {
  const { 
    random, 
    floor 
  } = Math;
  const result: 0 | 1 | 2 | 3 = floor( random() * 100 ) % 4;

  switch( result ) {
    case 1: yield T_TError.of('T_T'); break;
    case 2: yield X_XError.of('X_X'); break;
    case 3: yield U_UError.of('U_U'); break;
    default: return '+_+';
  }
}

Fourth, Find and Replace try-catch block using Renai-js.

/** Before ▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼ */
// play.ts
try {
  const result = randomOops();
}
catch(e) {
  switch( e.message ) {
    case 'T_T': /** error handling1 */ break;
    case 'X_X': /** error handling2 */ break;
    case 'U_U': /** error handling3 */ break;
    default   : /** unexcepted error handling */ break;
  }
}

/** After ▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼ */
// play.ts
import { renai, UnknownError } from 'renai-js';
import { randomOops, T_TError, X_XError, U_UError } from './oops';

/** if you want literal type attach 'as const' behind return value or set literal return type. */
const result: number | string | boolean | UnknownError = renai(
  randomOops,
  {
    'T_TError': (error: T_TError): number => { /** error handling1 */ },
    'X_XError': (error: X_XError): string => { /** error handling2 */ },
    'U_UError': (error: U_UError): boolean => { /** error handling3 */ },
    'UnknownError': (error: UnknownError): UnknownError => { /** unexcepted error handling */ }
  }
);

Browser Version Support

chorme 55+

Browser Version
Chorme 55+
Edge 15+
Safari 11+
Firefox 52+
Opera 42+
IE Not Support
※ referenced by "https://caniuse.com/"