# option

> The option type, also known as the maybe type, for JavaScript

Latest version **0.2.4** (published 2017-06-23) · BSD-2-Clause license · 0 weekly downloads

## Install

```sh
npm install option
pnpm add option
yarn add option
bun add option
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.2.4 |
| Published | 2017-06-23 |
| First published | 2012-08-25 |
| Weekly downloads | 0 |
| License | BSD-2-Clause |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 24 |
| Author | Michael Williamson |
| Maintainers | mwilliamson |
| Keywords | option, maybe |

## Links

- npm: https://www.npmjs.com/package/option
- Repository: https://github.com/mwilliamson/node-options
- Issues: https://github.com/mwilliamson/node-options/issues
- npm.io page: https://npm.io/package/option

## Recent versions

- 0.2.4 (latest) — 2017-06-23
- 0.2.3 — 2016-02-25
- 0.2.2 — 2015-06-12
- 0.2.1 — 2013-04-14
- 0.2.0 — 2012-08-25

## README

# options for node.js

An implementation of the option type, sometimes known as the maybe type.

An instance of an option type is an optional value. Either it's `none`, or an
instance of `Some`:

```javascript
var option = require("option");

var some = option.some("Bob");
var none = option.none;
```   

A function that returns an optional string isn't that different from a function
that returns a string or `null`. The advantage over null is that options
provide a number of functions that help with manipulating optional values.

```javascript
    function greet(user) {
        return "Hello " + user.name().valueOrElse("Anonymous");
    }
```

## Methods

### isNone() and isSome()

* `some(value).isNone()` returns `false`
* `some(value).isSome()` returns `true`
* `none.isNone()` returns `true`
* `none.isSome()` returns `false`

### value()

* `some(value).value()` returns `value`
* `none.value()` throws an error

### map(*func*)

* `some(value).map(func)` returns `some(func(value))`
* `none.map(func)` returns `none`

### flatMap(*func*)

Conventionally used when `func` returns another option.

* `some(value).flatMap(func)` returns `func(value)`
* `none.flatMap(func)` returns `none`

### filter(*predicate*)

* `some(value).filter(predicate)` returns:
  * `some(value)` if `predicate(value) === true`
  * `none` if `predicate(value) === false`
* `none.filter(predicate)` returns `none`

### toArray()

* `some(value).toArray()` returns `[some]`
* `none.toArray()` returns `[]`

### orElse(*other*)

If `other` is a function (`other` conventionally returning another option):

* `some(value).orElse(other)` returns `some(value)`
* `none.orElse(other)` returns `other()`

If `other` is not a function (`other` conventionally being another option):

* `some(value).orElse(other)` returns `some(value)`
* `none.orElse(other)` returns `other`

### valueOrElse(*other*)

If `other` is a function:

* `some(value).valueOrElse(other)` returns `value`
* `none.valueOrElse(other)` returns `other()`

If `other` is not a function:

* `some(value).valueOrElse(other)` returns `value`
* `none.valueOrElse(other)` returns `other`

## Functions

### option.isOption(*value*)

* `option.isOption(value)` returns `true` if `value` is `option.none` or `option.some(x)`.

### option.fromNullable(*value*)

* If `value` is `null` or `undefined`, `option.fromNullable(value)` returns `option.none`.
* Otherwise, returns `option.some(value)`.
  For instance, `option.fromNullable(5)` returns `option.some(5)`.

## Installation

    npm install option

---
_Source: https://npm.io/package/option · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
