UNPKG

define-enum

Version:

A utility function to define enum-like objects with TypeScript support.一个帮助定义枚举的工具函数

144 lines (143 loc) 4.26 kB
"use strict"; var __webpack_require__ = {}; (()=>{ __webpack_require__.d = (exports1, definition)=>{ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, { enumerable: true, get: definition[key] }); }; })(); (()=>{ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop); })(); (()=>{ __webpack_require__.r = (exports1)=>{ if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, { value: 'Module' }); Object.defineProperty(exports1, '__esModule', { value: true }); }; })(); var __webpack_exports__ = {}; __webpack_require__.r(__webpack_exports__); __webpack_require__.d(__webpack_exports__, { defineEnum: ()=>defineEnum }); const defineEnum = (enumItems)=>{ const enumMap = {}; const labelMap = {}; const keyMap = {}; const options = []; const allItems = []; const valuesSet = new Set(); const keysSet = new Set(); for (const item of enumItems){ enumMap[item.key] = item.value; labelMap[item.value] = item.label; keyMap[item.value] = item.key; valuesSet.add(item.value); keysSet.add(item.key); allItems.push(item); options.push({ label: item.label, value: item.value, disabled: item.disabled }); } Object.defineProperty(enumMap, 'getLabel', { value: (key)=>labelMap[key], writable: false, enumerable: false, configurable: false }); Object.defineProperty(enumMap, 'getKey', { value: (value)=>keyMap[value], writable: false, enumerable: false, configurable: false }); Object.defineProperty(enumMap, 'getOptions', { value: (config)=>{ const { labelKey = 'label', valueKey = 'value', excludeDisabled = false, ...rest } = config || {}; const filter = excludeDisabled ? allItems.filter((item)=>!item.disabled) : allItems; return filter.map((item)=>{ const { label, value, disabled } = item || {}; if (void 0 === disabled) return { [labelKey]: label, [valueKey]: value, ...rest }; return { [labelKey]: label, [valueKey]: value, disabled: item.disabled, ...rest }; }); }, writable: false, enumerable: false, configurable: false }); Object.defineProperty(enumMap, 'entries', { value: ()=>[ ...allItems ], writable: false, enumerable: false, configurable: false }); Object.defineProperty(enumMap, 'keys', { value: ()=>Array.from(keysSet), writable: false, enumerable: false, configurable: false }); Object.defineProperty(enumMap, 'values', { value: ()=>Array.from(valuesSet), writable: false, enumerable: false, configurable: false }); Object.defineProperty(enumMap, 'has', { value: (value)=>valuesSet.has(value), writable: false, enumerable: false, configurable: false }); return enumMap; }; const TestStatus = defineEnum([ { key: 'UNKNOWN', value: 0, label: "\u672A\u77E5", disabled: true }, { key: 'PASS', value: 1, label: "\u901A\u8FC7" }, { key: 'FAIL', value: 2, label: "\u5931\u8D25" } ]); console.log(TestStatus.keys()); console.log(TestStatus.values()); console.log(TestStatus.entries()); console.log(TestStatus.getOptions({ excludeDisabled: true })); exports.defineEnum = __webpack_exports__.defineEnum; for(var __webpack_i__ in __webpack_exports__)if (-1 === [ "defineEnum" ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__]; Object.defineProperty(exports, '__esModule', { value: true });