@produck/ow
v0.2.2
Published
Throwing exception regularly.
Downloads
309
Readme
@produck/ow
Throwing exception regularly.
Installation
npm install @produck/owUsage
import * as Ow from "@produck/ow";Ow.throw(value)
Throws the given value directly.
Ow.throw(new Error("something went wrong"));
// => throws Error: something went wrong
Ow.throw("plain string");
// => throws 'plain string'Ow.Thrower(ErrorConstructor)
Creates a thrower function bound to the specified error constructor. The returned function accepts the same arguments as the error constructor and throws the constructed error.
const throwTypeError = Ow.Thrower(TypeError);
throwTypeError("invalid type");
// => throws TypeError: invalid type
class CustomError extends Error {
constructor(message) {
super(message);
this.name = "CustomError";
}
}
const throwCustom = Ow.Thrower(CustomError);
throwCustom("custom message");
// => throws CustomError: custom messageOw.Error
A collection of pre-built thrower functions for all built-in error types.
| Thrower | Error Type |
| -------------------- | ---------------- |
| Ow.Error.Common | Error |
| Ow.Error.Eval | EvalError |
| Ow.Error.Range | RangeError |
| Ow.Error.Reference | ReferenceError |
| Ow.Error.Syntax | SyntaxError |
| Ow.Error.Type | TypeError |
| Ow.Error.URI | URIError |
| Ow.Error.Aggregate | AggregateError |
Ow.Error.Type("expected a string");
// => throws TypeError: expected a string
Ow.Error.Range("index out of bounds");
// => throws RangeError: index out of bounds
Ow.Error.Aggregate([err1, err2], "multiple errors");
// => throws AggregateError: multiple errorsTypeScript
Type definitions are included. All thrower functions are fully typed with
ConstructorParameters inference.
import * as Ow from "@produck/ow";
Ow.Error.Type("msg"); // (...args: ConstructorParameters<TypeErrorConstructor>) => never
Ow.throw(new Error()); // (any: unknown) => neverWhy
In JavaScript, throw is a statement, not an expression. This means
it cannot be used directly in arrow functions, ternary expressions,
or logical chains. @produck/ow wraps throw into function calls,
making exception throwing more flexible and composable.
// Without ow — statement only, cannot inline
if (!input) {
throw new TypeError("input is required");
}
// With ow — works as an expression
const value = input ?? Ow.Error.Type("input is required");
// Arrow function — throw is not allowed in expression body
const assertString = (v) =>
typeof v === "string" || Ow.Error.Type("expected a string");Thrower() creates reusable thrower functions that can be assigned,
passed around, and shared — no need to repeat
throw new XxxError(...) everywhere.
All thrower functions return never in TypeScript, so the compiler
correctly infers that control flow does not continue past the call.
License
MIT © Produck Shop
