/* global define, __DEV__ */
(function () {
'use strict';
function Enum(dfn) {
const props = {};
const vals = [];
Object.entries(dfn).forEach(([key, value]) => {
props[key] = {value};
vals.push(value);
});
return Object.freeze(
Object.create(vals, props)
);
}
Enum.coalesce = function(obj, field) {
if (field in obj || field in Object.values(obj)) {
return field;
}
return null;
};
Enum.enforce = function(obj, field) {
var value = Enum.coalesce(obj, field);
if (value !== null) {
return value;
}
Iif (__DEV__) {
throw new Error('Value ' + field + ' not found in object ' + obj);
} else {
throw new Error('Invalid Enum');
}
};
Eif (typeof module !== 'undefined' && module.exports) {
module.exports = Enum;
} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {
// same as npm pacakge name
define('enumjs', [], function () {
return Enum;
});
} else {
window.Enum = Enum;
}
}());
|