Coder Social home page Coder Social logo

assert-options's Introduction

assert-options

Smart options-object handling, with one line of code:

  • throw detailed error on invalid options
  • set default values for missing options

Strongly-typed, built with TypeScript 4.x strict mode, for JavaScript clients.

Rationale

  • Passing in invalid or misspelled option names is one of the most common errors in JavaScript.
  • Assigning defaults is the most common operation for methods that take options.

This module automates proper options handling - parsing + setting defaults in one line.

Although this library is implemented in TypeScript, its objective is mainly to help JavaScript clients, because TypeScript itself can handle invalid options and defaults natively.

Installation

$ npm i assert-options

Usage

const { assertOptions } = require('assert-options');

function functionWithOptions(options) {
    options = assertOptions(options, {first: 123, second: null});
    
    // options is a safe object here, with all missing defaults set.
}

When default values are not needed, you can just use an array of strings:

function functionWithOptions(options) {
    options = assertOptions(options, ['first', 'second']);
    
    // the result is exactly the same as using the following:
    // options = assertOptions(options, {first: undefined, second: undefined});
    
    // options is a safe object here, without defaults.
}

You can override how errors are thrown, by creating the assert function yourself, and specifying a custom handler:

const {createAssert} = require('assert-options');

// must implement IOptionsErrorHandler protocol
class MyErrorHanler {
    handle(err, ctx) {
        // throw different errors, based on "err"
        // for reference, see DefaultErrorHandler implementation 
    }
}

const assert = createAssert(new MyErrorHanler());

API

assertOptions(options, defaults)

  • When options is null/undefined, new {} is returned, applying defaults as specified.

  • When options contains an unknown property, Error Option "name" is not recognized. is thrown.

  • When a property in options is missing or undefined, its value is set from the defaults, provided it is available and its value is not undefined.

  • When options is not null/undefined, it must be of type object, or else TypeError is thrown: Invalid "options" parameter: value.

  • Parameter defaults is required, as a non-null object or an array of strings, or else TypeError is thrown: Invalid "defaults" parameter: value.

createAssert(handler)

Creates a new assert function, using a custom error handler that implements IOptionsErrorHandler protocol.

For example, the default assertOptions is created internally like this:

const {createOptions, DefaultErrorHandler} = require('assert-options');

const assertOptions = createAssert(new DefaultErrorHandler());

assert-options's People

Contributors

vitaly-t avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.