JSPM

throw2

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

Sugar syntax to throw exceptions as an expression.

Package Exports

  • throw2

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (throw2) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

This is a fork of anton-rudeshko/node-throw. If you are familiar with the original project, see Fork Changes below.


throw2

You can't use throw statement in expressions in JavaScript:

arg = arg || throw new Error('arg is required');
//           ^^^^^
// Uncaught SyntaxError: Unexpected token 'throw'

This tiny library is wrapping throw in a function:

// Use capital T to distinguish this module from the throw keyword
const Throw = require('throw2');

// ...

arg = arg || Throw('arg is required');

This is particularly useful when using nullish coalescing operator and optional chaining operator:

value = obj?.nested?.value ?? Throw('value not found');

Installation

npm i throw2

Require/Import

CommonJS:

const Throw = require('throw2');

ESM:

import Throw from 'throw2';

More Usage Options

You can compose dynamic error messages by providing multiple arguments:

typeof arg === 'string' || Throw('Invalid arg. Received:', arg, 'Should be string.');

You can also use your own error types:

/*...expression...*/ || Throw(new MyCustomError(arg1, arg2));

// Or

/*...expression...*/ || Throw(MyCustomError, arg1, arg2); // Creates a MyCustomError with arg1 and arg2

Note

Throw as an expression is currently a Stage 2 TC39 proposal, so this package might no longer be necessary in the future.

Fork Changes

The main difference is that node-throw uses Node.js API, so it doesn't work in the browser without a polyfill. throw2 works in any CommonJS environment. (e.g. noje.js and webpack)

Also, printf-like message formatting is not supported by throw2. Use template literals instead; or pass multiple arguments to the function. (see usage examples)

License

MIT