define-enum
Version:
A utility function to define enum-like objects with TypeScript support.一个帮助定义枚举的工具函数
144 lines (143 loc) • 4.26 kB
JavaScript
;
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
});