UNPKG

string-enum

Version:
1 lines 990 B
function StringEnum(...r){1===r.length&&null!=r[0]&&r[0].constructor===Array&&(r=r[0]);const e=new.target?this:Object.create(StringEnum.prototype);function t(r,e){return Object.getOwnPropertyDescriptor(r,e)}for(let n of r){if("string"!=typeof n)throw new TypeError("Enum elements should be strings: "+n);if(t(e,n))throw new Error("Enum element already defined: "+n);e[n]=void 0}const n={get(r,e){if(t(r,e))return e;if("symbol"==typeof e)return r[e];if("__proto__"===e)return r.__proto__;if("__proxied__"===e)return r;if(e in r.__proto__)return r.__proto__[e];throw new ReferenceError(`Undefined enum property: ${e}`)},set(r,e,n){throw t(r,e)?new TypeError(`Cant modify enum property: ${e}`):new TypeError(`Cant define new enum property: ${e}`)},defineProperty(r,e,t){n.set(r,e,void 0)},deleteProperty(r,e){throw new TypeError(`Cant delete enum property: ${e}`)},has:(r,e)=>!!t(r,e)};return new Proxy(e,n)}StringEnum.prototype[Symbol.iterator]=function*(){for(const r in this)yield this[r]};