optional-js

Optionals for JS - wrapper for possibly undefined values, inspired by Java Optional API

Usage no npm install needed!

<script type="module">
  import optionalJs from 'https://cdn.skypack.dev/optional-js';
</script>

README

npm version License: MIT

Optional.js

A container object that wraps possibly undefined values in JavaScript - inspired by Java Optionals

Optional.ofNullable(promptForUserName)
        .map(getUserId)
        .filter(verify)
        .ifPresent(login);

Features

  • Runs in browser and Node
  • Full Java 8 Optional API is supported, and partial Java 9 API implemented (everything minus stream())
  • Zero dependencies
  • TypeScript type definitions included
  • Lightweight (<1.0 KB minified, gzipped)

Installation

Download the latest release from GitHub or from NPM

via npm:

$ npm install optional-js

then just require in node:

const Optional = require('optional-js');
const emptyOptional = Optional.empty();

alternatively, use the browser compatible build in the ./dist directory of the npm package

Not using a module loader? Include the script, and the browser global Optional will be added to window.

Usage

Java docs - Java 9 Optionals
TSDocs - index.d.ts

JS Example:

// "login.js"

const Optional = require('optional-js');

// Define some simple operations
const getUserId = 
    username => username === 'root' ? 1234 : 0;

const verify = 
    userId => userId === 1234;

const login = 
    userId => console.log('Logging in as : ' + userId);
    
// Declare a potentially undefined value
const username = process.argv[2];

// Wrap username in an Optional, and build a pipeline using our operations
Optional.ofNullable(username)
        .map(getUserId)
        .filter(verify)
        .ifPresent(login);

Then, from the terminal...

$ node login.js root
"Logging in as : 1234"

Building

download:

git clone git@github.com:JasonStorey/Optional.js.git

enter the directory, and install dependencies:

cd Optional.js && npm install

build:

npm run build

Testing

run the tests:

npm test

Contributing

Found a bug or missing feature? Please open an issue!

Send your feedback. Send your pull requests. All contributions are appreciated!

License

Optional.js may be freely distributed under the MIT license - LICENSE