# `@particle/make-enum`

Turn an array of values into an object that will throw an error when getting a non existing property to avoid typos in enum values

Note: relies on [`Proxy`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy) which is a Javascript feature that cannot be polyfilled, so it's not safe to use in the browser.


## Installation

```shell
npm install @particle/make-enum --save
```

<!-- private-module-note-start -->

<!-- private-module-note-end -->


```js
const makeEnum = require('@particle/make-enum');
```


## API
<!-- api-docs-start -->
<a name="module_@particle/make-enum"></a>

### @particle/make-enum

* * *

<a name="exp_module_@particle/make-enum--module.exports"></a>

#### module.exports(values) ⇒ <code>Object</code> ⏏
Turn an array of values into an object that will throw an error
when getting a non existing property to avoid typos in enum values

**Kind**: Exported function  
**Returns**: <code>Object</code> - The extended array object where enum values can be accessed as properties  

| Param | Type | Description |
| --- | --- | --- |
| values | <code>Array</code> | The array of string values for the enum |

**Example**  
```js
const states = makeEnum(['new', 'in_progress']);
// states.new === 'new'
// states.inprogress throws

const nestedEnum = makeEnum(['animals.cow', 'animals', 'animals.eagle']);
// To compare with the string, the enum must be basted to a string
// nestedEnum.animals.toString() === 'animals'
// `${nestedEnum.animals.cow}` === 'animals.cow'
```

* * *


<!-- api-docs-end -->

_NOTE: Unfortunately, docs have a nasty habit of falling out of date. When in doubt, check usage in [tests](./src/index.test.js)_

