0.1.0 • Published 4 years ago

ensuring v0.1.0

Weekly downloads
3
License
MIT
Repository
github
Last release
4 years ago

ensuring

JavaScript library emulating the with keyword from Python.

Python's with keyword uses the concept of context manager to wrap a block of code within a context of execution (think of it like a function) that is always executed, no matter the outcome of the block (including an exception).

# Opening a file
with open('my-file') as file_pointer:
    do_something_risky(file_pointer)

# Custom context manager
with my_context_manager():
    do_something_risky()

In both scenarios, Python will execute an __enter__ and an __exit__ function before and after the block is evaluated, handling possible exceptions.

The ensuring library offers a similar API.

EnsureSync

The EnsureSync class is a base from which consumers can define their own context managers. Just inherit from the class and define your own enter and exit methods.

import { EnsureSync } from 'ensuring';


class Logger extends EnsureSync {

    exit(error, result) {
        if (error) {
            console.error(`Got error: ${error}`);
        }

        console.log(`Got result: ${result}`);

        return result;
    }
}

Logger.ensure(myFunction);
Logger.ensure(context, myFunction);

EnsureSync.enter

The enter method can be used to setup the environment in which the function will be called. Since the context is saved on class construction (if any), it can be accessed as this.context.

EnsureSync.exit

The exit method is passed error generated by the wrapped function (if any) and the return value of the wrapper function (if any). It returns the value that should be passed to the environment, so you can process the wrapped function outcome.

EnsureAsync

Just like EnsureSync, but awaits for the wrapped function before executing exit.