enum.js

0.1.0 • Public • Published

enum.js

Tiny vanilla JS library for creating enumerations.

Installation

Recommended way to install is via Bower:

bower install --save enumjs

or via NPM:

bower install --save enum.js

Note that package names are different for Bower and NPM.

If you aren't using Bower, just download it as zip.

Basic usage

First, define your enum:

Enum.define('Beverage', ['BEER', 'SODA', 'JUICE']);

Then you can access it through the global Beverage object:

console.log(Beverage.JUICE);

AMD/require

For AMD modules, the thing works a bit different.

// file Beverage.js
define(['enum'], function (Enum) {
  return new Enum(['BEER', 'SODA', 'JUICE']);
});
// another file
require(['Beverage'], function(Beverage) {
  console.log(Beverage.SODA);
});

Node

// file Beverage.js
var Enum = require('enum');

module.exports = new Enum(['BEER', 'SODA', 'JUICE']);
// another file
var Beverage = require('Beverage');

console.log(Beverage.BEER);

Cool tricks for cool kids

Every element has a .toString() method:
console.log(Beverage.SODA.toString()); // "SODA"
You can pass a custom toString function right after the list of elements:
Enum.define('Beverage', ['BEER', 'SODA', 'JUICE'], function (value) {
  
  switch(value) {
    case Beverage.BEER:
      return 'Tasty beer, 4,5% alcohol by volume';

    case Beverage.SODA:
      return 'Tasty soda, 0% alcohol by volume';

    case Beverage.JUICE:
      return 'Now this is healthy';
  }
});

console.log(Beverage.JUICE.toString()); // "Now this is healthy"

This is good for cases where you need to show a pretty value for the user based on your enum.

Get all the possible values for a given enum:
Object.keys(Beverage); // ["BEER", "SODA", "JUICE"]
Elements are immutable:

In NodeJS and modern browsers (IE9+), the enum elements are immutable:

Enum.define('Beverage', ['BEER', 'SODA', 'JUICE']);

Beverage.BEER = "I'm trying to override you";

console.log(Beverage.BEER.toString()); //"BEER", works normally

However, the global enum object (Beverage in our case) is still mutable.

Old browser gotchas

To ensure element immutability, enum.js relies on Object.freeze(). This method is not available for IE8 and below, so be aware if you need to support old browsers.

Testing

To test in NodeJS:
jasmine

To test browser AMD/require behavior:
karma start karma-amd.conf.js

To test common browser environment behavior:
karma start

Full command:
jasmine && karma start --single-run && karma start karma-amd.conf.js --single-run

Contributing

In case you have an improvement idea or found an "easter egg", open an issue.

Package Sidebar

Install

npm i enum.js

Weekly Downloads

2

Version

0.1.0

License

MIT

Last publish

Collaborators

  • jairovsky