[](https://badge.fury.io/js/optional-js) [](https://opensource.org/licenses/MIT)
Optional.js
===========
> A container object that wraps possibly undefined values in JavaScript - inspired by [Java Optionals](https://docs.oracle.com/javase/9/docs/api/java/util/Optional.html)
``` javascript
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](https://github.com/JasonStorey/Optional.js/releases) from GitHub or from [NPM](https://www.npmjs.com/package/optional-js)
via npm:
``` bash
$ npm install optional-js
```
then just require in node:
``` javascript
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](https://docs.oracle.com/javase/9/docs/api/java/util/Optional.html)
TSDocs - [index.d.ts](https://github.com/JasonStorey/Optional.js/blob/master/index.d.ts)
JS Example:
``` javascript
// "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...
``` bash
$ node login.js root
"Logging in as : 1234"
````
# Building
download:
``` bash
git clone git@github.com:JasonStorey/Optional.js.git
```
enter the directory, and install dependencies:
```bash
cd Optional.js && npm install
```
build:
```bash
npm run build
```
# Testing
run the tests:
```bash
npm test
```
# Contributing
Found a bug or missing feature? Please open an [issue](https://github.com/JasonStorey/Optional.js/issues)!
Send your feedback. Send your pull requests. All contributions are appreciated!
# License
Optional.js may be freely distributed under the MIT license - [LICENSE](https://github.com/JasonStorey/Optional.js/blob/master/LICENSE)