@yafh/enum-def
Advanced tools
+24
-2
@@ -28,4 +28,26 @@ "use strict"; | ||
| // src/impl.ts | ||
| function defineEnum(items) { | ||
| return null; | ||
| function defineEnum(option) { | ||
| const res = {}; | ||
| Object.entries(option).forEach(([key, value]) => { | ||
| const _value = Object.freeze({ | ||
| ...value, | ||
| name: key | ||
| }); | ||
| Object.defineProperty(res, key, { | ||
| enumerable: true, | ||
| value: Object.assign(new Number(value.value), _value), | ||
| writable: false | ||
| }); | ||
| Object.defineProperty(res, value.value, { | ||
| enumerable: false, | ||
| value: Object.assign(new String(key), _value), | ||
| writable: false | ||
| }); | ||
| }); | ||
| res[Symbol.iterator] = function* () { | ||
| for (const key in res) { | ||
| yield res[key]; | ||
| } | ||
| }; | ||
| return res; | ||
| } | ||
@@ -32,0 +54,0 @@ // Annotate the CommonJS export names for ESM import in node: |
+19
-9
@@ -32,8 +32,10 @@ type Definite<T> = { | ||
| type UnknownEnumType<D extends EnumOption> = EnumItem<string, string, number, D>; | ||
| type EunmItemsDefine<D extends EnumOption> = { | ||
| type NumEnumIter<D extends EnumOption> = { | ||
| [K in keyof D as D[K] extends EnumItemOption ? K : never]: NumWrapEnumItem<D[K]['title'], K & string, D[K]['value'], D>; | ||
| } & { | ||
| }; | ||
| type StrEnumIter<D extends EnumOption> = { | ||
| [K in keyof D as D[K] extends EnumItemOption ? D[K]['value'] : never]: StrWrapEnumItem<D[K]['title'], K & string, D[K]['value'], D>; | ||
| }; | ||
| type EnumIterate<D> = Iterable<unknown>; | ||
| type EunmItemsDefine<D extends EnumOption> = NumEnumIter<D> & StrEnumIter<D>; | ||
| type EnumIterate<D> = [{}] extends [D] ? Iterable<unknown> : D extends EnumOption ? Iterable<NumEnumIter<D>[keyof NumEnumIter<D>]> : Iterable<unknown>; | ||
| type UnknownEnumDefine<D extends EnumOption = EnumOption> = { | ||
@@ -44,3 +46,4 @@ readonly [s: string]: (UnknownEnumType<D> & number) | undefined; | ||
| } & EnumIterate<D>; | ||
| type EnumDefine<D extends EnumOption> = EunmItemsDefine<D> & EnumIterate<D>; | ||
| type DefiniteEnumDefine<D extends EnumOption> = EunmItemsDefine<D> & EnumIterate<D>; | ||
| type EnumDefine<D extends EnumOption> = DefiniteEnumDefine<D> & UnknownEnumDefine<D>; | ||
| type NumWrapEnumItem<T extends string, N extends string, V extends number, D extends EnumOption> = EnumItem<T, N, V, D> & V; | ||
@@ -56,3 +59,3 @@ type StrWrapEnumItem<T extends string, N extends string, V extends number, D extends EnumOption> = EnumItem<T, N, V, D> & N; | ||
| */ | ||
| type EnumNames<T extends EnumDefine<{}>> = keyof Definite<T> & string; | ||
| type EnumNames<T extends UnknownEnumDefine> = keyof Definite<T> & string; | ||
| /** | ||
@@ -66,3 +69,3 @@ * 获取枚举项值联合类型 | ||
| */ | ||
| type EnumValues<T extends EnumDefine<{}>> = { | ||
| type EnumValues<T extends UnknownEnumDefine> = { | ||
| [K in EnumNames<T>]: T[K] extends EnumItem<string, string, infer V, {}> ? V : never; | ||
@@ -78,3 +81,3 @@ }[EnumNames<T>]; | ||
| */ | ||
| type EnumTitles<T extends EnumDefine<{}>> = { | ||
| type EnumTitles<T extends UnknownEnumDefine> = { | ||
| [K in EnumNames<T>]: T[K] extends EnumItem<infer T, string, number, {}> ? T : never; | ||
@@ -135,4 +138,11 @@ }[EnumNames<T>]; | ||
| declare function defineEnum<const T extends EnumOption>(items: T): EnumDefine<T> & UnknownEnumDefine<T>; | ||
| /** | ||
| * 定义一个枚举 | ||
| * @param option 枚举定义 | ||
| * @example | ||
| * ```ts | ||
| * ``` | ||
| */ | ||
| declare function defineEnum<const T extends EnumOption>(option: T): EnumDefine<T>; | ||
| export { type EnumDefine, type EnumItem, type EnumItemOption, type EnumItemValue, type EnumNames, type EnumOption, type EnumTitles, type EnumValues, type RequestEnumItem, type RequestEnumValue, type UnWrapEnumValue, type UnknownEnumDefine, type UnknownEnumType, defineEnum }; | ||
| export { type DefiniteEnumDefine, type EnumDefine, type EnumItem, type EnumItemOption, type EnumItemValue, type EnumIterate, type EnumNames, type EnumOption, type EnumTitles, type EnumValues, type EunmItemsDefine, type RequestEnumItem, type RequestEnumValue, type UnWrapEnumValue, type UnknownEnumDefine, type UnknownEnumType, defineEnum }; |
+19
-9
@@ -32,8 +32,10 @@ type Definite<T> = { | ||
| type UnknownEnumType<D extends EnumOption> = EnumItem<string, string, number, D>; | ||
| type EunmItemsDefine<D extends EnumOption> = { | ||
| type NumEnumIter<D extends EnumOption> = { | ||
| [K in keyof D as D[K] extends EnumItemOption ? K : never]: NumWrapEnumItem<D[K]['title'], K & string, D[K]['value'], D>; | ||
| } & { | ||
| }; | ||
| type StrEnumIter<D extends EnumOption> = { | ||
| [K in keyof D as D[K] extends EnumItemOption ? D[K]['value'] : never]: StrWrapEnumItem<D[K]['title'], K & string, D[K]['value'], D>; | ||
| }; | ||
| type EnumIterate<D> = Iterable<unknown>; | ||
| type EunmItemsDefine<D extends EnumOption> = NumEnumIter<D> & StrEnumIter<D>; | ||
| type EnumIterate<D> = [{}] extends [D] ? Iterable<unknown> : D extends EnumOption ? Iterable<NumEnumIter<D>[keyof NumEnumIter<D>]> : Iterable<unknown>; | ||
| type UnknownEnumDefine<D extends EnumOption = EnumOption> = { | ||
@@ -44,3 +46,4 @@ readonly [s: string]: (UnknownEnumType<D> & number) | undefined; | ||
| } & EnumIterate<D>; | ||
| type EnumDefine<D extends EnumOption> = EunmItemsDefine<D> & EnumIterate<D>; | ||
| type DefiniteEnumDefine<D extends EnumOption> = EunmItemsDefine<D> & EnumIterate<D>; | ||
| type EnumDefine<D extends EnumOption> = DefiniteEnumDefine<D> & UnknownEnumDefine<D>; | ||
| type NumWrapEnumItem<T extends string, N extends string, V extends number, D extends EnumOption> = EnumItem<T, N, V, D> & V; | ||
@@ -56,3 +59,3 @@ type StrWrapEnumItem<T extends string, N extends string, V extends number, D extends EnumOption> = EnumItem<T, N, V, D> & N; | ||
| */ | ||
| type EnumNames<T extends EnumDefine<{}>> = keyof Definite<T> & string; | ||
| type EnumNames<T extends UnknownEnumDefine> = keyof Definite<T> & string; | ||
| /** | ||
@@ -66,3 +69,3 @@ * 获取枚举项值联合类型 | ||
| */ | ||
| type EnumValues<T extends EnumDefine<{}>> = { | ||
| type EnumValues<T extends UnknownEnumDefine> = { | ||
| [K in EnumNames<T>]: T[K] extends EnumItem<string, string, infer V, {}> ? V : never; | ||
@@ -78,3 +81,3 @@ }[EnumNames<T>]; | ||
| */ | ||
| type EnumTitles<T extends EnumDefine<{}>> = { | ||
| type EnumTitles<T extends UnknownEnumDefine> = { | ||
| [K in EnumNames<T>]: T[K] extends EnumItem<infer T, string, number, {}> ? T : never; | ||
@@ -135,4 +138,11 @@ }[EnumNames<T>]; | ||
| declare function defineEnum<const T extends EnumOption>(items: T): EnumDefine<T> & UnknownEnumDefine<T>; | ||
| /** | ||
| * 定义一个枚举 | ||
| * @param option 枚举定义 | ||
| * @example | ||
| * ```ts | ||
| * ``` | ||
| */ | ||
| declare function defineEnum<const T extends EnumOption>(option: T): EnumDefine<T>; | ||
| export { type EnumDefine, type EnumItem, type EnumItemOption, type EnumItemValue, type EnumNames, type EnumOption, type EnumTitles, type EnumValues, type RequestEnumItem, type RequestEnumValue, type UnWrapEnumValue, type UnknownEnumDefine, type UnknownEnumType, defineEnum }; | ||
| export { type DefiniteEnumDefine, type EnumDefine, type EnumItem, type EnumItemOption, type EnumItemValue, type EnumIterate, type EnumNames, type EnumOption, type EnumTitles, type EnumValues, type EunmItemsDefine, type RequestEnumItem, type RequestEnumValue, type UnWrapEnumValue, type UnknownEnumDefine, type UnknownEnumType, defineEnum }; |
+24
-2
| // src/impl.ts | ||
| function defineEnum(items) { | ||
| return null; | ||
| function defineEnum(option) { | ||
| const res = {}; | ||
| Object.entries(option).forEach(([key, value]) => { | ||
| const _value = Object.freeze({ | ||
| ...value, | ||
| name: key | ||
| }); | ||
| Object.defineProperty(res, key, { | ||
| enumerable: true, | ||
| value: Object.assign(new Number(value.value), _value), | ||
| writable: false | ||
| }); | ||
| Object.defineProperty(res, value.value, { | ||
| enumerable: false, | ||
| value: Object.assign(new String(key), _value), | ||
| writable: false | ||
| }); | ||
| }); | ||
| res[Symbol.iterator] = function* () { | ||
| for (const key in res) { | ||
| yield res[key]; | ||
| } | ||
| }; | ||
| return res; | ||
| } | ||
@@ -5,0 +27,0 @@ export { |
+3
-2
| { | ||
| "name": "@yafh/enum-def", | ||
| "version": "0.1.0", | ||
| "version": "0.1.1", | ||
| "module": "index.ts", | ||
@@ -9,3 +9,4 @@ "type": "module", | ||
| "bump": "bumpp", | ||
| "test": "vitest" | ||
| "test": "vitest", | ||
| "prepublish": "bun build" | ||
| }, | ||
@@ -12,0 +13,0 @@ "devDependencies": { |
14096
17.22%224
32.54%