enum-nxt

Create enums using the latest ES spec.

Usage no npm install needed!

<script type="module">
  import enumNxt from 'https://cdn.skypack.dev/enum-nxt';
</script>

README

Introduction

This library is inspired by Java Enums, enumify, and enum. The goal was to create a JavaScript enum library that is safe, extensible, flexible, and JSON parsable. This project also uses the latest ES spec wherever possible.

Installation

Files

All distribution files can be found in the dist folder

Version Description
enum-nxt.umd.min.js Minified version that uses UMD. Most common option.
enum-nxt.umd.js Unminified version that uses UMD.
enum-nxt.js Source code with comments. Useful if you want to use it for transpiling.

Example Usage

import {Enum} from 'enum-nxt';

//Creating enum from arguments list
let argsEnum = new Enum('RED', 'GREEN', 'BLUE');

//Creating enum from string array
let arrayEnum = new Enum(['RED']);

//Creating enum from object with custom attributes
let objEnum = new Enum({
  'RED': {foo: 1},
  'BLUE': {},
  'GREEN': {},
  'YELLOW': {foo: 2}
});

//Member examples
objEnum.RED.foo === 1;
objEnum["RED"].foo === 1;
objEnum.RED.name === 'RED';
objEnum.size === 4;
argsEnum.GREEN.name === 'GREEN';
argsEnum.size === 3;

//Function examples
for(let [key, value] of objEnum) {}
for(let [key, value] of objEnum.entries()) {}
for(let key of objEnum.keys()) {}
for(let value of objEnum.values()) {}

var enumArray = Array.from(objEnum);

objEnum.forEach((value, key, enum) => {}, this);

let value = objEnum.RED;
objEnum.has('PURPLE') === false;
objEnum.has('RED') === true;
objEnum.has('red') === false;
objEnum.has(value) === true;
objEnum.has({}) === false;
objEnum.has(null); //Throws TypeError 'key must be of type string or Object'

objEnum.freeze();
Object.isFrozen(objEnum) === true;
objEnum.foo = 23; // throws a TypeError under strict mode

//JSON stringify and parse
var json = JSON.stringify(objEnum);
var otherEnum = new Enum(JSON.parse(json));

See also

  • The source file (src/enum.es6) for comments
  • The unit tests (src/enum.spec.es6) for more example usage