@naturalcycles/js-lib 14.187.0 → 14.188.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/enum.util.d.ts +41 -14
- package/dist/enum.util.js +74 -23
- package/dist-esm/enum.util.js +62 -17
- package/package.json +1 -1
- package/src/enum.util.ts +78 -21
package/dist/enum.util.d.ts
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import type { NumberEnum, StringEnum } from './types';
|
|
2
2
|
/**
|
|
3
|
-
* Returns all
|
|
3
|
+
* Returns all String keys of a number-enum.
|
|
4
4
|
*/
|
|
5
5
|
export declare function _numberEnumKeys(en: NumberEnum): string[];
|
|
6
6
|
/**
|
|
7
|
-
* Returns all
|
|
7
|
+
* Returns all Number values of a number-enum.
|
|
8
8
|
*/
|
|
9
9
|
export declare function _numberEnumValues(en: NumberEnum): number[];
|
|
10
10
|
/**
|
|
11
|
-
* Returns all
|
|
11
|
+
* Returns all String keys of a string-enum.
|
|
12
12
|
*/
|
|
13
13
|
export declare function _stringEnumKeys(en: StringEnum): string[];
|
|
14
14
|
/**
|
|
15
|
-
* Returns all
|
|
15
|
+
* Returns all String values of a string-enum.
|
|
16
16
|
*/
|
|
17
|
-
export declare function _stringEnumValues(en:
|
|
17
|
+
export declare function _stringEnumValues<T extends StringEnum>(en: T): T[keyof T][];
|
|
18
18
|
/**
|
|
19
19
|
* Returns all number-enum "entries", where entry is a tuple of [key, value],
|
|
20
20
|
* where key is a String key, value is a Number value, typed as Enum itself.
|
|
@@ -22,28 +22,55 @@ export declare function _stringEnumValues(en: StringEnum): string[];
|
|
|
22
22
|
* Doesn't work on String-enums!
|
|
23
23
|
*/
|
|
24
24
|
export declare function _numberEnumEntries<T extends NumberEnum>(en: T): [k: string, v: T[keyof T]][];
|
|
25
|
+
/**
|
|
26
|
+
* Like _numberEnumEntries, but reversed.
|
|
27
|
+
* So, keys are Numbers, values are Strings.
|
|
28
|
+
*/
|
|
29
|
+
export declare function _numberEnumEntriesReversed<T extends NumberEnum>(en: T): [k: number, v: keyof T][];
|
|
30
|
+
/**
|
|
31
|
+
* Like _numberEnumEntries, but as a Map.
|
|
32
|
+
* Keys are Strings, values are Numbers.
|
|
33
|
+
*/
|
|
34
|
+
export declare function _numberEnumAsMap<T extends NumberEnum>(en: T): Map<string, T[keyof T]>;
|
|
35
|
+
/**
|
|
36
|
+
* Like _numberEnumEntriesReversed, but as a Map.
|
|
37
|
+
* Keys are Numbers (actual Numbers, because it's a Map, not an Object), values are Strings.
|
|
38
|
+
*/
|
|
39
|
+
export declare function _numberEnumAsMapReversed<T extends NumberEnum>(en: T): Map<number, keyof T>;
|
|
25
40
|
/**
|
|
26
41
|
* Returns all string-enum "entries", where entry is a tuple of [key, value],
|
|
27
42
|
* where key is a String key, value is a String value, typed as Enum itself.
|
|
28
43
|
*
|
|
29
44
|
* Doesn't work on Number-enums!
|
|
30
45
|
*/
|
|
31
|
-
export declare function _stringEnumEntries<T extends StringEnum>(en: T): [k:
|
|
46
|
+
export declare function _stringEnumEntries<T extends StringEnum>(en: T): [k: keyof T, v: T[keyof T]][];
|
|
47
|
+
/**
|
|
48
|
+
* Like _stringEnumEntries, but keys and values are reversed.
|
|
49
|
+
*/
|
|
50
|
+
export declare function _stringEnumEntriesReversed<T extends StringEnum>(en: T): [k: T[keyof T], v: keyof T][];
|
|
51
|
+
/**
|
|
52
|
+
* Return String enum as Map (with the same keys and values).
|
|
53
|
+
*/
|
|
54
|
+
export declare function _stringEnumAsMap<T extends StringEnum>(en: T): Map<keyof T, T[keyof T]>;
|
|
55
|
+
/**
|
|
56
|
+
* Return String enum as Map, with keys and values reversed.
|
|
57
|
+
*/
|
|
58
|
+
export declare function _stringEnumAsMapReversed<T extends StringEnum>(en: T): Map<T[keyof T], keyof T>;
|
|
32
59
|
/**
|
|
33
60
|
* Allows to return a Number enum value (typed as Enum itself) based on it's String key.
|
|
34
61
|
* e.g:
|
|
35
|
-
* const v = SomeEnum['
|
|
62
|
+
* const v = SomeEnum['stringKey']
|
|
36
63
|
* // v is of type SomeEnum, which is of type Number
|
|
37
64
|
*
|
|
38
65
|
* Throws if value is not found!
|
|
39
66
|
*/
|
|
40
|
-
export declare function
|
|
67
|
+
export declare function _numberEnumValue<T extends NumberEnum>(en: T, k: keyof T): T[keyof T];
|
|
41
68
|
/**
|
|
42
|
-
*
|
|
69
|
+
* _numberEnumKey, but allows to get/return undefined output.
|
|
43
70
|
*/
|
|
44
|
-
export declare function
|
|
71
|
+
export declare function _numberEnumValueOrUndefined<T extends NumberEnum>(en: T, k: keyof T | undefined): T[keyof T] | undefined;
|
|
45
72
|
/**
|
|
46
|
-
* Takes number or string enum input, returns normalized Enum output.
|
|
73
|
+
* Takes number or string enum input, returns normalized Enum output (Number).
|
|
47
74
|
* Only works for number enums.
|
|
48
75
|
*
|
|
49
76
|
* Throws if value is not found!
|
|
@@ -52,14 +79,14 @@ export declare function _numberEnumNormalize<T extends NumberEnum>(en: T, v: str
|
|
|
52
79
|
/**
|
|
53
80
|
* Same as _numberEnumNormalize, but allows to return undefined values.
|
|
54
81
|
*/
|
|
55
|
-
export declare function
|
|
82
|
+
export declare function _numberEnumNormalizeOrUndefined<T extends NumberEnum>(en: T, v: string | number | undefined): T[keyof T] | undefined;
|
|
56
83
|
/**
|
|
57
84
|
* Returns a String key for given NumberEnum value, or undefined if not found.
|
|
58
85
|
*/
|
|
59
|
-
export declare function
|
|
86
|
+
export declare function _numberEnumKeyOrUndefined<T extends NumberEnum>(en: T, v: T[keyof T] | undefined | null): keyof T | undefined;
|
|
60
87
|
/**
|
|
61
88
|
* Returns a String key for given NumberEnum value, throws if not found.
|
|
62
89
|
*/
|
|
63
90
|
export declare function _numberEnumKey<T extends NumberEnum>(en: T, v: T[keyof T] | undefined | null): keyof T;
|
|
64
|
-
export declare function
|
|
91
|
+
export declare function _stringEnumKeyOrUndefined<T extends StringEnum>(en: T, v: string | undefined | null): keyof T | undefined;
|
|
65
92
|
export declare function _stringEnumKey<T extends StringEnum>(en: T, v: string | undefined | null): keyof T;
|
package/dist/enum.util.js
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports._stringEnumKey = exports.
|
|
3
|
+
exports._stringEnumKey = exports._stringEnumKeyOrUndefined = exports._numberEnumKey = exports._numberEnumKeyOrUndefined = exports._numberEnumNormalizeOrUndefined = exports._numberEnumNormalize = exports._numberEnumValueOrUndefined = exports._numberEnumValue = exports._stringEnumAsMapReversed = exports._stringEnumAsMap = exports._stringEnumEntriesReversed = exports._stringEnumEntries = exports._numberEnumAsMapReversed = exports._numberEnumAsMap = exports._numberEnumEntriesReversed = exports._numberEnumEntries = exports._stringEnumValues = exports._stringEnumKeys = exports._numberEnumValues = exports._numberEnumKeys = void 0;
|
|
4
4
|
/**
|
|
5
|
-
* Returns all
|
|
5
|
+
* Returns all String keys of a number-enum.
|
|
6
6
|
*/
|
|
7
7
|
function _numberEnumKeys(en) {
|
|
8
8
|
return Object.values(en).filter(k => typeof k === 'string');
|
|
9
9
|
}
|
|
10
10
|
exports._numberEnumKeys = _numberEnumKeys;
|
|
11
11
|
/**
|
|
12
|
-
* Returns all
|
|
12
|
+
* Returns all Number values of a number-enum.
|
|
13
13
|
*/
|
|
14
14
|
function _numberEnumValues(en) {
|
|
15
15
|
return Object.values(en).filter(k => typeof k === 'number');
|
|
16
16
|
}
|
|
17
17
|
exports._numberEnumValues = _numberEnumValues;
|
|
18
18
|
/**
|
|
19
|
-
* Returns all
|
|
19
|
+
* Returns all String keys of a string-enum.
|
|
20
20
|
*/
|
|
21
21
|
function _stringEnumKeys(en) {
|
|
22
22
|
return Object.keys(en);
|
|
23
23
|
}
|
|
24
24
|
exports._stringEnumKeys = _stringEnumKeys;
|
|
25
25
|
/**
|
|
26
|
-
* Returns all
|
|
26
|
+
* Returns all String values of a string-enum.
|
|
27
27
|
*/
|
|
28
28
|
function _stringEnumValues(en) {
|
|
29
29
|
// filtering here is unnecessary, but works as a safety in case Number-enum is passed
|
|
@@ -42,6 +42,36 @@ function _numberEnumEntries(en) {
|
|
|
42
42
|
.map(k => [k, en[k]]);
|
|
43
43
|
}
|
|
44
44
|
exports._numberEnumEntries = _numberEnumEntries;
|
|
45
|
+
/**
|
|
46
|
+
* Like _numberEnumEntries, but reversed.
|
|
47
|
+
* So, keys are Numbers, values are Strings.
|
|
48
|
+
*/
|
|
49
|
+
function _numberEnumEntriesReversed(en) {
|
|
50
|
+
return Object.values(en)
|
|
51
|
+
.filter(k => typeof k === 'string')
|
|
52
|
+
.map(k => [en[k], k]);
|
|
53
|
+
}
|
|
54
|
+
exports._numberEnumEntriesReversed = _numberEnumEntriesReversed;
|
|
55
|
+
/**
|
|
56
|
+
* Like _numberEnumEntries, but as a Map.
|
|
57
|
+
* Keys are Strings, values are Numbers.
|
|
58
|
+
*/
|
|
59
|
+
function _numberEnumAsMap(en) {
|
|
60
|
+
return new Map(Object.values(en)
|
|
61
|
+
.filter(k => typeof k === 'string')
|
|
62
|
+
.map(k => [k, en[k]]));
|
|
63
|
+
}
|
|
64
|
+
exports._numberEnumAsMap = _numberEnumAsMap;
|
|
65
|
+
/**
|
|
66
|
+
* Like _numberEnumEntriesReversed, but as a Map.
|
|
67
|
+
* Keys are Numbers (actual Numbers, because it's a Map, not an Object), values are Strings.
|
|
68
|
+
*/
|
|
69
|
+
function _numberEnumAsMapReversed(en) {
|
|
70
|
+
return new Map(Object.values(en)
|
|
71
|
+
.filter(k => typeof k === 'string')
|
|
72
|
+
.map(k => [en[k], k]));
|
|
73
|
+
}
|
|
74
|
+
exports._numberEnumAsMapReversed = _numberEnumAsMapReversed;
|
|
45
75
|
/**
|
|
46
76
|
* Returns all string-enum "entries", where entry is a tuple of [key, value],
|
|
47
77
|
* where key is a String key, value is a String value, typed as Enum itself.
|
|
@@ -52,36 +82,57 @@ function _stringEnumEntries(en) {
|
|
|
52
82
|
return Object.entries(en);
|
|
53
83
|
}
|
|
54
84
|
exports._stringEnumEntries = _stringEnumEntries;
|
|
85
|
+
/**
|
|
86
|
+
* Like _stringEnumEntries, but keys and values are reversed.
|
|
87
|
+
*/
|
|
88
|
+
function _stringEnumEntriesReversed(en) {
|
|
89
|
+
return Object.entries(en).map(([k, v]) => [v, k]);
|
|
90
|
+
}
|
|
91
|
+
exports._stringEnumEntriesReversed = _stringEnumEntriesReversed;
|
|
92
|
+
/**
|
|
93
|
+
* Return String enum as Map (with the same keys and values).
|
|
94
|
+
*/
|
|
95
|
+
function _stringEnumAsMap(en) {
|
|
96
|
+
return new Map(Object.entries(en));
|
|
97
|
+
}
|
|
98
|
+
exports._stringEnumAsMap = _stringEnumAsMap;
|
|
99
|
+
/**
|
|
100
|
+
* Return String enum as Map, with keys and values reversed.
|
|
101
|
+
*/
|
|
102
|
+
function _stringEnumAsMapReversed(en) {
|
|
103
|
+
return new Map(Object.entries(en).map(([k, v]) => [v, k]));
|
|
104
|
+
}
|
|
105
|
+
exports._stringEnumAsMapReversed = _stringEnumAsMapReversed;
|
|
55
106
|
/**
|
|
56
107
|
* Allows to return a Number enum value (typed as Enum itself) based on it's String key.
|
|
57
108
|
* e.g:
|
|
58
|
-
* const v = SomeEnum['
|
|
109
|
+
* const v = SomeEnum['stringKey']
|
|
59
110
|
* // v is of type SomeEnum, which is of type Number
|
|
60
111
|
*
|
|
61
112
|
* Throws if value is not found!
|
|
62
113
|
*/
|
|
63
|
-
function
|
|
64
|
-
const r = en[
|
|
114
|
+
function _numberEnumValue(en, k) {
|
|
115
|
+
const r = en[k];
|
|
65
116
|
if (!r)
|
|
66
|
-
throw new Error(`
|
|
117
|
+
throw new Error(`_numberEnumValue not found for: ${k}`);
|
|
67
118
|
return r;
|
|
68
119
|
}
|
|
69
|
-
exports.
|
|
120
|
+
exports._numberEnumValue = _numberEnumValue;
|
|
70
121
|
/**
|
|
71
|
-
*
|
|
122
|
+
* _numberEnumKey, but allows to get/return undefined output.
|
|
72
123
|
*/
|
|
73
|
-
function
|
|
74
|
-
return en[
|
|
124
|
+
function _numberEnumValueOrUndefined(en, k) {
|
|
125
|
+
return en[k];
|
|
75
126
|
}
|
|
76
|
-
exports.
|
|
127
|
+
exports._numberEnumValueOrUndefined = _numberEnumValueOrUndefined;
|
|
77
128
|
/**
|
|
78
|
-
* Takes number or string enum input, returns normalized Enum output.
|
|
129
|
+
* Takes number or string enum input, returns normalized Enum output (Number).
|
|
79
130
|
* Only works for number enums.
|
|
80
131
|
*
|
|
81
132
|
* Throws if value is not found!
|
|
82
133
|
*/
|
|
83
134
|
function _numberEnumNormalize(en, v) {
|
|
84
|
-
const r =
|
|
135
|
+
const r = _numberEnumNormalizeOrUndefined(en, v);
|
|
85
136
|
if (!r || !en[r])
|
|
86
137
|
throw new Error(`_numberEnumNormalize value not found for: ${v}`);
|
|
87
138
|
return r;
|
|
@@ -90,19 +141,19 @@ exports._numberEnumNormalize = _numberEnumNormalize;
|
|
|
90
141
|
/**
|
|
91
142
|
* Same as _numberEnumNormalize, but allows to return undefined values.
|
|
92
143
|
*/
|
|
93
|
-
function
|
|
144
|
+
function _numberEnumNormalizeOrUndefined(en, v) {
|
|
94
145
|
return typeof v === 'string' ? en[v] : v;
|
|
95
146
|
}
|
|
96
|
-
exports.
|
|
147
|
+
exports._numberEnumNormalizeOrUndefined = _numberEnumNormalizeOrUndefined;
|
|
97
148
|
/**
|
|
98
149
|
* Returns a String key for given NumberEnum value, or undefined if not found.
|
|
99
150
|
*/
|
|
100
|
-
function
|
|
151
|
+
function _numberEnumKeyOrUndefined(en, v) {
|
|
101
152
|
const key = en[v];
|
|
102
153
|
// This prevents passing a Key (not a Value) of enum here, which returns unexpected result (number, not string)
|
|
103
154
|
return typeof key === 'string' ? key : undefined;
|
|
104
155
|
}
|
|
105
|
-
exports.
|
|
156
|
+
exports._numberEnumKeyOrUndefined = _numberEnumKeyOrUndefined;
|
|
106
157
|
/**
|
|
107
158
|
* Returns a String key for given NumberEnum value, throws if not found.
|
|
108
159
|
*/
|
|
@@ -114,14 +165,14 @@ function _numberEnumKey(en, v) {
|
|
|
114
165
|
return key;
|
|
115
166
|
}
|
|
116
167
|
exports._numberEnumKey = _numberEnumKey;
|
|
117
|
-
function
|
|
168
|
+
function _stringEnumKeyOrUndefined(en,
|
|
118
169
|
// v: T[keyof T] | undefined | null, // cannot make it type-safe :(
|
|
119
170
|
v) {
|
|
120
171
|
return Object.entries(en).find(([_, v2]) => v2 === v)?.[0];
|
|
121
172
|
}
|
|
122
|
-
exports.
|
|
173
|
+
exports._stringEnumKeyOrUndefined = _stringEnumKeyOrUndefined;
|
|
123
174
|
function _stringEnumKey(en, v) {
|
|
124
|
-
const r =
|
|
175
|
+
const r = _stringEnumKeyOrUndefined(en, v);
|
|
125
176
|
if (!r)
|
|
126
177
|
throw new Error(`_stringEnumKey not found for: ${v}`);
|
|
127
178
|
return r;
|
package/dist-esm/enum.util.js
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Returns all
|
|
2
|
+
* Returns all String keys of a number-enum.
|
|
3
3
|
*/
|
|
4
4
|
export function _numberEnumKeys(en) {
|
|
5
5
|
return Object.values(en).filter(k => typeof k === 'string');
|
|
6
6
|
}
|
|
7
7
|
/**
|
|
8
|
-
* Returns all
|
|
8
|
+
* Returns all Number values of a number-enum.
|
|
9
9
|
*/
|
|
10
10
|
export function _numberEnumValues(en) {
|
|
11
11
|
return Object.values(en).filter(k => typeof k === 'number');
|
|
12
12
|
}
|
|
13
13
|
/**
|
|
14
|
-
* Returns all
|
|
14
|
+
* Returns all String keys of a string-enum.
|
|
15
15
|
*/
|
|
16
16
|
export function _stringEnumKeys(en) {
|
|
17
17
|
return Object.keys(en);
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
20
|
-
* Returns all
|
|
20
|
+
* Returns all String values of a string-enum.
|
|
21
21
|
*/
|
|
22
22
|
export function _stringEnumValues(en) {
|
|
23
23
|
// filtering here is unnecessary, but works as a safety in case Number-enum is passed
|
|
@@ -34,6 +34,33 @@ export function _numberEnumEntries(en) {
|
|
|
34
34
|
.filter(k => typeof k === 'string')
|
|
35
35
|
.map(k => [k, en[k]]);
|
|
36
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Like _numberEnumEntries, but reversed.
|
|
39
|
+
* So, keys are Numbers, values are Strings.
|
|
40
|
+
*/
|
|
41
|
+
export function _numberEnumEntriesReversed(en) {
|
|
42
|
+
return Object.values(en)
|
|
43
|
+
.filter(k => typeof k === 'string')
|
|
44
|
+
.map(k => [en[k], k]);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Like _numberEnumEntries, but as a Map.
|
|
48
|
+
* Keys are Strings, values are Numbers.
|
|
49
|
+
*/
|
|
50
|
+
export function _numberEnumAsMap(en) {
|
|
51
|
+
return new Map(Object.values(en)
|
|
52
|
+
.filter(k => typeof k === 'string')
|
|
53
|
+
.map(k => [k, en[k]]));
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Like _numberEnumEntriesReversed, but as a Map.
|
|
57
|
+
* Keys are Numbers (actual Numbers, because it's a Map, not an Object), values are Strings.
|
|
58
|
+
*/
|
|
59
|
+
export function _numberEnumAsMapReversed(en) {
|
|
60
|
+
return new Map(Object.values(en)
|
|
61
|
+
.filter(k => typeof k === 'string')
|
|
62
|
+
.map(k => [en[k], k]));
|
|
63
|
+
}
|
|
37
64
|
/**
|
|
38
65
|
* Returns all string-enum "entries", where entry is a tuple of [key, value],
|
|
39
66
|
* where key is a String key, value is a String value, typed as Enum itself.
|
|
@@ -43,34 +70,52 @@ export function _numberEnumEntries(en) {
|
|
|
43
70
|
export function _stringEnumEntries(en) {
|
|
44
71
|
return Object.entries(en);
|
|
45
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Like _stringEnumEntries, but keys and values are reversed.
|
|
75
|
+
*/
|
|
76
|
+
export function _stringEnumEntriesReversed(en) {
|
|
77
|
+
return Object.entries(en).map(([k, v]) => [v, k]);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Return String enum as Map (with the same keys and values).
|
|
81
|
+
*/
|
|
82
|
+
export function _stringEnumAsMap(en) {
|
|
83
|
+
return new Map(Object.entries(en));
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Return String enum as Map, with keys and values reversed.
|
|
87
|
+
*/
|
|
88
|
+
export function _stringEnumAsMapReversed(en) {
|
|
89
|
+
return new Map(Object.entries(en).map(([k, v]) => [v, k]));
|
|
90
|
+
}
|
|
46
91
|
/**
|
|
47
92
|
* Allows to return a Number enum value (typed as Enum itself) based on it's String key.
|
|
48
93
|
* e.g:
|
|
49
|
-
* const v = SomeEnum['
|
|
94
|
+
* const v = SomeEnum['stringKey']
|
|
50
95
|
* // v is of type SomeEnum, which is of type Number
|
|
51
96
|
*
|
|
52
97
|
* Throws if value is not found!
|
|
53
98
|
*/
|
|
54
|
-
export function
|
|
55
|
-
const r = en[
|
|
99
|
+
export function _numberEnumValue(en, k) {
|
|
100
|
+
const r = en[k];
|
|
56
101
|
if (!r)
|
|
57
|
-
throw new Error(`
|
|
102
|
+
throw new Error(`_numberEnumValue not found for: ${k}`);
|
|
58
103
|
return r;
|
|
59
104
|
}
|
|
60
105
|
/**
|
|
61
|
-
*
|
|
106
|
+
* _numberEnumKey, but allows to get/return undefined output.
|
|
62
107
|
*/
|
|
63
|
-
export function
|
|
64
|
-
return en[
|
|
108
|
+
export function _numberEnumValueOrUndefined(en, k) {
|
|
109
|
+
return en[k];
|
|
65
110
|
}
|
|
66
111
|
/**
|
|
67
|
-
* Takes number or string enum input, returns normalized Enum output.
|
|
112
|
+
* Takes number or string enum input, returns normalized Enum output (Number).
|
|
68
113
|
* Only works for number enums.
|
|
69
114
|
*
|
|
70
115
|
* Throws if value is not found!
|
|
71
116
|
*/
|
|
72
117
|
export function _numberEnumNormalize(en, v) {
|
|
73
|
-
const r =
|
|
118
|
+
const r = _numberEnumNormalizeOrUndefined(en, v);
|
|
74
119
|
if (!r || !en[r])
|
|
75
120
|
throw new Error(`_numberEnumNormalize value not found for: ${v}`);
|
|
76
121
|
return r;
|
|
@@ -78,13 +123,13 @@ export function _numberEnumNormalize(en, v) {
|
|
|
78
123
|
/**
|
|
79
124
|
* Same as _numberEnumNormalize, but allows to return undefined values.
|
|
80
125
|
*/
|
|
81
|
-
export function
|
|
126
|
+
export function _numberEnumNormalizeOrUndefined(en, v) {
|
|
82
127
|
return typeof v === 'string' ? en[v] : v;
|
|
83
128
|
}
|
|
84
129
|
/**
|
|
85
130
|
* Returns a String key for given NumberEnum value, or undefined if not found.
|
|
86
131
|
*/
|
|
87
|
-
export function
|
|
132
|
+
export function _numberEnumKeyOrUndefined(en, v) {
|
|
88
133
|
const key = en[v];
|
|
89
134
|
// This prevents passing a Key (not a Value) of enum here, which returns unexpected result (number, not string)
|
|
90
135
|
return typeof key === 'string' ? key : undefined;
|
|
@@ -99,14 +144,14 @@ export function _numberEnumKey(en, v) {
|
|
|
99
144
|
throw new Error(`_numberEnumKey not found for: ${v}`);
|
|
100
145
|
return key;
|
|
101
146
|
}
|
|
102
|
-
export function
|
|
147
|
+
export function _stringEnumKeyOrUndefined(en,
|
|
103
148
|
// v: T[keyof T] | undefined | null, // cannot make it type-safe :(
|
|
104
149
|
v) {
|
|
105
150
|
var _a;
|
|
106
151
|
return (_a = Object.entries(en).find(([_, v2]) => v2 === v)) === null || _a === void 0 ? void 0 : _a[0];
|
|
107
152
|
}
|
|
108
153
|
export function _stringEnumKey(en, v) {
|
|
109
|
-
const r =
|
|
154
|
+
const r = _stringEnumKeyOrUndefined(en, v);
|
|
110
155
|
if (!r)
|
|
111
156
|
throw new Error(`_stringEnumKey not found for: ${v}`);
|
|
112
157
|
return r;
|
package/package.json
CHANGED
package/src/enum.util.ts
CHANGED
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
import type { NumberEnum, StringEnum } from './types'
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* Returns all
|
|
4
|
+
* Returns all String keys of a number-enum.
|
|
5
5
|
*/
|
|
6
6
|
export function _numberEnumKeys(en: NumberEnum): string[] {
|
|
7
7
|
return Object.values(en).filter(k => typeof k === 'string') as string[]
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
|
-
* Returns all
|
|
11
|
+
* Returns all Number values of a number-enum.
|
|
12
12
|
*/
|
|
13
13
|
export function _numberEnumValues(en: NumberEnum): number[] {
|
|
14
14
|
return Object.values(en).filter(k => typeof k === 'number') as number[]
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
|
-
* Returns all
|
|
18
|
+
* Returns all String keys of a string-enum.
|
|
19
19
|
*/
|
|
20
20
|
export function _stringEnumKeys(en: StringEnum): string[] {
|
|
21
21
|
return Object.keys(en)
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
|
-
* Returns all
|
|
25
|
+
* Returns all String values of a string-enum.
|
|
26
26
|
*/
|
|
27
|
-
export function _stringEnumValues(en:
|
|
27
|
+
export function _stringEnumValues<T extends StringEnum>(en: T): T[keyof T][] {
|
|
28
28
|
// filtering here is unnecessary, but works as a safety in case Number-enum is passed
|
|
29
|
-
return Object.values(en).filter(k => typeof k === 'string')
|
|
29
|
+
return Object.values(en).filter(k => typeof k === 'string') as any
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
/**
|
|
@@ -41,48 +41,105 @@ export function _numberEnumEntries<T extends NumberEnum>(en: T): [k: string, v:
|
|
|
41
41
|
.map(k => [k, en[k]]) as any
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
+
/**
|
|
45
|
+
* Like _numberEnumEntries, but reversed.
|
|
46
|
+
* So, keys are Numbers, values are Strings.
|
|
47
|
+
*/
|
|
48
|
+
export function _numberEnumEntriesReversed<T extends NumberEnum>(en: T): [k: number, v: keyof T][] {
|
|
49
|
+
return Object.values(en)
|
|
50
|
+
.filter(k => typeof k === 'string')
|
|
51
|
+
.map(k => [en[k], k]) as any
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Like _numberEnumEntries, but as a Map.
|
|
56
|
+
* Keys are Strings, values are Numbers.
|
|
57
|
+
*/
|
|
58
|
+
export function _numberEnumAsMap<T extends NumberEnum>(en: T): Map<string, T[keyof T]> {
|
|
59
|
+
return new Map(
|
|
60
|
+
Object.values(en)
|
|
61
|
+
.filter(k => typeof k === 'string')
|
|
62
|
+
.map(k => [k, en[k]]) as any,
|
|
63
|
+
)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Like _numberEnumEntriesReversed, but as a Map.
|
|
68
|
+
* Keys are Numbers (actual Numbers, because it's a Map, not an Object), values are Strings.
|
|
69
|
+
*/
|
|
70
|
+
export function _numberEnumAsMapReversed<T extends NumberEnum>(en: T): Map<number, keyof T> {
|
|
71
|
+
return new Map(
|
|
72
|
+
Object.values(en)
|
|
73
|
+
.filter(k => typeof k === 'string')
|
|
74
|
+
.map(k => [en[k], k]) as any,
|
|
75
|
+
)
|
|
76
|
+
}
|
|
77
|
+
|
|
44
78
|
/**
|
|
45
79
|
* Returns all string-enum "entries", where entry is a tuple of [key, value],
|
|
46
80
|
* where key is a String key, value is a String value, typed as Enum itself.
|
|
47
81
|
*
|
|
48
82
|
* Doesn't work on Number-enums!
|
|
49
83
|
*/
|
|
50
|
-
export function _stringEnumEntries<T extends StringEnum>(en: T): [k:
|
|
84
|
+
export function _stringEnumEntries<T extends StringEnum>(en: T): [k: keyof T, v: T[keyof T]][] {
|
|
51
85
|
return Object.entries(en) as any
|
|
52
86
|
}
|
|
53
87
|
|
|
88
|
+
/**
|
|
89
|
+
* Like _stringEnumEntries, but keys and values are reversed.
|
|
90
|
+
*/
|
|
91
|
+
export function _stringEnumEntriesReversed<T extends StringEnum>(
|
|
92
|
+
en: T,
|
|
93
|
+
): [k: T[keyof T], v: keyof T][] {
|
|
94
|
+
return Object.entries(en).map(([k, v]) => [v, k]) as any
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Return String enum as Map (with the same keys and values).
|
|
99
|
+
*/
|
|
100
|
+
export function _stringEnumAsMap<T extends StringEnum>(en: T): Map<keyof T, T[keyof T]> {
|
|
101
|
+
return new Map(Object.entries(en)) as any
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Return String enum as Map, with keys and values reversed.
|
|
106
|
+
*/
|
|
107
|
+
export function _stringEnumAsMapReversed<T extends StringEnum>(en: T): Map<T[keyof T], keyof T> {
|
|
108
|
+
return new Map(Object.entries(en).map(([k, v]) => [v, k])) as any
|
|
109
|
+
}
|
|
110
|
+
|
|
54
111
|
/**
|
|
55
112
|
* Allows to return a Number enum value (typed as Enum itself) based on it's String key.
|
|
56
113
|
* e.g:
|
|
57
|
-
* const v = SomeEnum['
|
|
114
|
+
* const v = SomeEnum['stringKey']
|
|
58
115
|
* // v is of type SomeEnum, which is of type Number
|
|
59
116
|
*
|
|
60
117
|
* Throws if value is not found!
|
|
61
118
|
*/
|
|
62
|
-
export function
|
|
63
|
-
const r = en[
|
|
64
|
-
if (!r) throw new Error(`
|
|
119
|
+
export function _numberEnumValue<T extends NumberEnum>(en: T, k: keyof T): T[keyof T] {
|
|
120
|
+
const r = en[k]
|
|
121
|
+
if (!r) throw new Error(`_numberEnumValue not found for: ${k as string}`)
|
|
65
122
|
return r
|
|
66
123
|
}
|
|
67
124
|
|
|
68
125
|
/**
|
|
69
|
-
*
|
|
126
|
+
* _numberEnumKey, but allows to get/return undefined output.
|
|
70
127
|
*/
|
|
71
|
-
export function
|
|
128
|
+
export function _numberEnumValueOrUndefined<T extends NumberEnum>(
|
|
72
129
|
en: T,
|
|
73
|
-
|
|
130
|
+
k: keyof T | undefined,
|
|
74
131
|
): T[keyof T] | undefined {
|
|
75
|
-
return en[
|
|
132
|
+
return en[k!]
|
|
76
133
|
}
|
|
77
134
|
|
|
78
135
|
/**
|
|
79
|
-
* Takes number or string enum input, returns normalized Enum output.
|
|
136
|
+
* Takes number or string enum input, returns normalized Enum output (Number).
|
|
80
137
|
* Only works for number enums.
|
|
81
138
|
*
|
|
82
139
|
* Throws if value is not found!
|
|
83
140
|
*/
|
|
84
141
|
export function _numberEnumNormalize<T extends NumberEnum>(en: T, v: string | number): T[keyof T] {
|
|
85
|
-
const r =
|
|
142
|
+
const r = _numberEnumNormalizeOrUndefined(en, v)
|
|
86
143
|
if (!r || !en[r as keyof T]) throw new Error(`_numberEnumNormalize value not found for: ${v}`)
|
|
87
144
|
return r
|
|
88
145
|
}
|
|
@@ -90,7 +147,7 @@ export function _numberEnumNormalize<T extends NumberEnum>(en: T, v: string | nu
|
|
|
90
147
|
/**
|
|
91
148
|
* Same as _numberEnumNormalize, but allows to return undefined values.
|
|
92
149
|
*/
|
|
93
|
-
export function
|
|
150
|
+
export function _numberEnumNormalizeOrUndefined<T extends NumberEnum>(
|
|
94
151
|
en: T,
|
|
95
152
|
v: string | number | undefined,
|
|
96
153
|
): T[keyof T] | undefined {
|
|
@@ -100,7 +157,7 @@ export function _numberEnumNormalizeNullable<T extends NumberEnum>(
|
|
|
100
157
|
/**
|
|
101
158
|
* Returns a String key for given NumberEnum value, or undefined if not found.
|
|
102
159
|
*/
|
|
103
|
-
export function
|
|
160
|
+
export function _numberEnumKeyOrUndefined<T extends NumberEnum>(
|
|
104
161
|
en: T,
|
|
105
162
|
v: T[keyof T] | undefined | null,
|
|
106
163
|
): keyof T | undefined {
|
|
@@ -122,7 +179,7 @@ export function _numberEnumKey<T extends NumberEnum>(
|
|
|
122
179
|
return key
|
|
123
180
|
}
|
|
124
181
|
|
|
125
|
-
export function
|
|
182
|
+
export function _stringEnumKeyOrUndefined<T extends StringEnum>(
|
|
126
183
|
en: T,
|
|
127
184
|
// v: T[keyof T] | undefined | null, // cannot make it type-safe :(
|
|
128
185
|
v: string | undefined | null,
|
|
@@ -131,7 +188,7 @@ export function _stringEnumKeyNullable<T extends StringEnum>(
|
|
|
131
188
|
}
|
|
132
189
|
|
|
133
190
|
export function _stringEnumKey<T extends StringEnum>(en: T, v: string | undefined | null): keyof T {
|
|
134
|
-
const r =
|
|
191
|
+
const r = _stringEnumKeyOrUndefined(en, v)
|
|
135
192
|
if (!r) throw new Error(`_stringEnumKey not found for: ${v}`)
|
|
136
193
|
return r
|
|
137
194
|
}
|