@enum/erate
Create an immutable enum with immutable items and custom properties on both enum and enum items.
Install
npm install @enum/erate --save
Usage: Quick Start
var enumerate = require('@enum/erate')
, Color = enumerate('Color', 'RED', 'GREEN', 'BLUE')
Color.name
Color.RED
Color.RED.name
Color.RED.index
Color.RED.value
Color.BLUE
Color.BLUE.name
Color.BLUE.index
Color.BLUE.value
Color.RED === Color.RED
Color.RED === Color.BLUE
Color.toString()
Color
{
{ name: 'RED', index:0, value:1 }
{ name: 'GREEN', index:1, value:2 }
{ name: 'BLUE', index:2, value:4 }
}
Color.items
Color.names()
Color.keys()
Color.indexes()
Color.values()
Color.RED.has(Color.RED)
Color.RED.has(Color.BLUE)
var purple = Color.RED.value | Color.BLUE.value
Color.RED.has(purple)
Color.GREEN.has(purple)
Color.BLUE.has(purple)
Color.valueOf(0)
Color.valueOf('RED')
Usage: How to Build
Specify the elements via multiple styles.
Always specify the name of the enum as the first input parameter.
enm = enumerate('Name', 'A', 'B', 'C')
enm = enumerate('Name', {name:'A'}, {name:'B'}, {name:'C'})
enm = enumerate('Name', ['A', 'B', 'C'])
enm = enumerate('Name', [{name:'A'}, {name:'B'}, {name:'C'}])
enm = enumerate('Name', {items:['A', 'B', 'C']})
enm = enumerate('Name', [
{name:'A', index:0, value:1},
{name:'B', index:1, value:2},
{name:'C', index:2, value:4}
])
enm = enumerate('Name',
{name:'A', index:0, value:1},
{name:'B', index:1, value:2},
{name:'C', index:2, value:4}
)
enm = enumerate('Name', {
someNum: 123,
someString: 'extra',
someFn: function () { return 'fun' }
items: [
{name:'A', itemNum:456 },
{name:'B', itemString:'item' },
{name:'C', itemFn:function() { return 'fun 2'} }
]
})
enm.someNum
enm.someString
enm.someFn()
enm.someNum = 35261
enm.someString = 'new string'
enm.someFun = function() { }
enm.A.itemNum
enm.A.itemString
enm.A.itemFn()
enm = enumerate('Name', {
items: [ 'A', 'B', 'C' ],
groups: {
AB: [ 'A', 'B' ],
BC: {
value: 6,
members: [ 'B', 'C' ]
}
}
})
enm.names
enm.AB.has(enm.A)
enm.AB.has(enm.C)
enm.AB.members
Usage: Groups
Specify extra enum items which group together other items. There's a simple way which auto-calculates the value and an explicit which allows specifying the value.
var enm = enumerate('Suit',
items: ['Spades', 'Hearts', 'Clubs', 'Diamonds'],
groups: {
Red: [ 'Hearts', 'Diamonds' ],
Black: {
value: 5,
members: [ 'Spades', 'Clubs' ]
}
}
)
Suit.Red.has(Suit.Hearts)
Suit.Black.has(Suit.Diamonds)
Suit.Red.members
MIT License