var EnumFactory = function() { if(arguments.length > 0){ var Enum = function Enum(arg){ if(typeof arg === 'number' && arg % 1 == 0) { return Enum._values[arg]; } else if(Enum[arg]){ return Enum[arg] } else if (Enum._values.indexOf(arg) !== -1 ) { return arg; } else if (arg === null) { return null; } else { return ''; } }; var dxList = []; dxList.push(''); // Want empty value to be at index 0 to match MySQL Enum values and MySQL non-strict behavior. for(var arg in arguments){ arg = String(arguments[arg]); Object.defineProperty(Enum, arg.toUpperCase(), {configurable: false, enumerable: true, value: arg, writable: false}); dxList.push(arg); } Object.defineProperty(Enum, '_values', {configurable: false, enumerable: false, value: dxList, writable: false}); Object.defineProperty(Enum, '_string', {configurable: false, enumerable: false, value: stringified(Enum), writable: false}); Object.freeze(Enum); return Enum; } else { throw "No arguments - could not create Enum."; } }; function stringified(anEnum) { var s = []; for(var i in anEnum._values){ if(anEnum._values[i] != ''){ s.push("'" + anEnum._values[i] + "'"); } } return s.join(','); } exports.EnumFactory = EnumFactory;