@naturalcycles/js-lib 14.186.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/datetime/localDate.d.ts +14 -0
- package/dist/datetime/localDate.js +18 -0
- package/dist/datetime/localTime.d.ts +14 -0
- package/dist/datetime/localTime.js +18 -0
- package/dist/enum.util.d.ts +41 -14
- package/dist/enum.util.js +74 -23
- package/dist-esm/datetime/localDate.js +18 -0
- package/dist-esm/datetime/localTime.js +18 -0
- package/dist-esm/enum.util.js +62 -17
- package/package.json +1 -1
- package/src/datetime/localDate.ts +20 -0
- package/src/datetime/localTime.ts +20 -0
- package/src/enum.util.ts +78 -21
|
@@ -59,6 +59,16 @@ export declare class LocalDate {
|
|
|
59
59
|
* Third argument allows to override "today".
|
|
60
60
|
*/
|
|
61
61
|
isOlderThan(n: number, unit: LocalDateUnitStrict, today?: LocalDateInput): boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Checks if this localDate is younger than "today" by X units.
|
|
64
|
+
*
|
|
65
|
+
* Example:
|
|
66
|
+
*
|
|
67
|
+
* localDate(expirationDate).isYoungerThan(5, 'day')
|
|
68
|
+
*
|
|
69
|
+
* Third argument allows to override "today".
|
|
70
|
+
*/
|
|
71
|
+
isYoungerThan(n: number, unit: LocalDateUnitStrict, today?: LocalDateInput): boolean;
|
|
62
72
|
/**
|
|
63
73
|
* Returns 1 if this > d
|
|
64
74
|
* returns 0 if they are equal
|
|
@@ -77,6 +87,10 @@ export declare class LocalDate {
|
|
|
77
87
|
diff(d: LocalDateInput, unit: LocalDateUnit): number;
|
|
78
88
|
add(num: number, unit: LocalDateUnit, mutate?: boolean): LocalDate;
|
|
79
89
|
subtract(num: number, unit: LocalDateUnit, mutate?: boolean): LocalDate;
|
|
90
|
+
/**
|
|
91
|
+
* Alias to subtract
|
|
92
|
+
*/
|
|
93
|
+
minus(num: number, unit: LocalDateUnit, mutate?: boolean): LocalDate;
|
|
80
94
|
startOf(unit: LocalDateUnitStrict): LocalDate;
|
|
81
95
|
endOf(unit: LocalDateUnitStrict): LocalDate;
|
|
82
96
|
static getYearLength(year: number): number;
|
|
@@ -191,6 +191,18 @@ class LocalDate {
|
|
|
191
191
|
isOlderThan(n, unit, today) {
|
|
192
192
|
return this.isBefore(LocalDate.of(today || new Date()).add(-n, unit));
|
|
193
193
|
}
|
|
194
|
+
/**
|
|
195
|
+
* Checks if this localDate is younger than "today" by X units.
|
|
196
|
+
*
|
|
197
|
+
* Example:
|
|
198
|
+
*
|
|
199
|
+
* localDate(expirationDate).isYoungerThan(5, 'day')
|
|
200
|
+
*
|
|
201
|
+
* Third argument allows to override "today".
|
|
202
|
+
*/
|
|
203
|
+
isYoungerThan(n, unit, today) {
|
|
204
|
+
return !this.isOlderThan(n, unit, today);
|
|
205
|
+
}
|
|
194
206
|
/**
|
|
195
207
|
* Returns 1 if this > d
|
|
196
208
|
* returns 0 if they are equal
|
|
@@ -340,6 +352,12 @@ class LocalDate {
|
|
|
340
352
|
subtract(num, unit, mutate = false) {
|
|
341
353
|
return this.add(-num, unit, mutate);
|
|
342
354
|
}
|
|
355
|
+
/**
|
|
356
|
+
* Alias to subtract
|
|
357
|
+
*/
|
|
358
|
+
minus(num, unit, mutate = false) {
|
|
359
|
+
return this.add(-num, unit, mutate);
|
|
360
|
+
}
|
|
343
361
|
startOf(unit) {
|
|
344
362
|
if (unit === 'day')
|
|
345
363
|
return this;
|
|
@@ -72,6 +72,10 @@ export declare class LocalTime {
|
|
|
72
72
|
setComponents(c: Partial<LocalTimeComponents>, mutate?: boolean): LocalTime;
|
|
73
73
|
add(num: number, unit: LocalTimeUnit, mutate?: boolean): LocalTime;
|
|
74
74
|
subtract(num: number, unit: LocalTimeUnit, mutate?: boolean): LocalTime;
|
|
75
|
+
/**
|
|
76
|
+
* Alias to subtract.
|
|
77
|
+
*/
|
|
78
|
+
minus(num: number, unit: LocalTimeUnit, mutate?: boolean): LocalTime;
|
|
75
79
|
absDiff(other: LocalTimeInput, unit: LocalTimeUnit): number;
|
|
76
80
|
diff(other: LocalTimeInput, unit: LocalTimeUnit): number;
|
|
77
81
|
startOf(unit: LocalTimeUnit, mutate?: boolean): LocalTime;
|
|
@@ -97,6 +101,16 @@ export declare class LocalTime {
|
|
|
97
101
|
* Third argument allows to override "now".
|
|
98
102
|
*/
|
|
99
103
|
isOlderThan(n: number, unit: LocalTimeUnit, now?: LocalTimeInput): boolean;
|
|
104
|
+
/**
|
|
105
|
+
* Checks if this localTime is younger than "now" by X units.
|
|
106
|
+
*
|
|
107
|
+
* Example:
|
|
108
|
+
*
|
|
109
|
+
* localTime(expirationDate).isYoungerThan(5, 'day')
|
|
110
|
+
*
|
|
111
|
+
* Third argument allows to override "now".
|
|
112
|
+
*/
|
|
113
|
+
isYoungerThan(n: number, unit: LocalTimeUnit, now?: LocalTimeInput): boolean;
|
|
100
114
|
/**
|
|
101
115
|
* Returns 1 if this > d
|
|
102
116
|
* returns 0 if they are equal
|
|
@@ -214,6 +214,12 @@ class LocalTime {
|
|
|
214
214
|
subtract(num, unit, mutate = false) {
|
|
215
215
|
return this.add(num * -1, unit, mutate);
|
|
216
216
|
}
|
|
217
|
+
/**
|
|
218
|
+
* Alias to subtract.
|
|
219
|
+
*/
|
|
220
|
+
minus(num, unit, mutate = false) {
|
|
221
|
+
return this.add(num * -1, unit, mutate);
|
|
222
|
+
}
|
|
217
223
|
absDiff(other, unit) {
|
|
218
224
|
return Math.abs(this.diff(other, unit));
|
|
219
225
|
}
|
|
@@ -369,6 +375,18 @@ class LocalTime {
|
|
|
369
375
|
isOlderThan(n, unit, now) {
|
|
370
376
|
return this.isBefore(LocalTime.of(now ?? new Date()).add(-n, unit));
|
|
371
377
|
}
|
|
378
|
+
/**
|
|
379
|
+
* Checks if this localTime is younger than "now" by X units.
|
|
380
|
+
*
|
|
381
|
+
* Example:
|
|
382
|
+
*
|
|
383
|
+
* localTime(expirationDate).isYoungerThan(5, 'day')
|
|
384
|
+
*
|
|
385
|
+
* Third argument allows to override "now".
|
|
386
|
+
*/
|
|
387
|
+
isYoungerThan(n, unit, now) {
|
|
388
|
+
return !this.isOlderThan(n, unit, now);
|
|
389
|
+
}
|
|
372
390
|
/**
|
|
373
391
|
* Returns 1 if this > d
|
|
374
392
|
* returns 0 if they are equal
|
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;
|
|
@@ -188,6 +188,18 @@ export class LocalDate {
|
|
|
188
188
|
isOlderThan(n, unit, today) {
|
|
189
189
|
return this.isBefore(LocalDate.of(today || new Date()).add(-n, unit));
|
|
190
190
|
}
|
|
191
|
+
/**
|
|
192
|
+
* Checks if this localDate is younger than "today" by X units.
|
|
193
|
+
*
|
|
194
|
+
* Example:
|
|
195
|
+
*
|
|
196
|
+
* localDate(expirationDate).isYoungerThan(5, 'day')
|
|
197
|
+
*
|
|
198
|
+
* Third argument allows to override "today".
|
|
199
|
+
*/
|
|
200
|
+
isYoungerThan(n, unit, today) {
|
|
201
|
+
return !this.isOlderThan(n, unit, today);
|
|
202
|
+
}
|
|
191
203
|
/**
|
|
192
204
|
* Returns 1 if this > d
|
|
193
205
|
* returns 0 if they are equal
|
|
@@ -337,6 +349,12 @@ export class LocalDate {
|
|
|
337
349
|
subtract(num, unit, mutate = false) {
|
|
338
350
|
return this.add(-num, unit, mutate);
|
|
339
351
|
}
|
|
352
|
+
/**
|
|
353
|
+
* Alias to subtract
|
|
354
|
+
*/
|
|
355
|
+
minus(num, unit, mutate = false) {
|
|
356
|
+
return this.add(-num, unit, mutate);
|
|
357
|
+
}
|
|
340
358
|
startOf(unit) {
|
|
341
359
|
if (unit === 'day')
|
|
342
360
|
return this;
|
|
@@ -212,6 +212,12 @@ export class LocalTime {
|
|
|
212
212
|
subtract(num, unit, mutate = false) {
|
|
213
213
|
return this.add(num * -1, unit, mutate);
|
|
214
214
|
}
|
|
215
|
+
/**
|
|
216
|
+
* Alias to subtract.
|
|
217
|
+
*/
|
|
218
|
+
minus(num, unit, mutate = false) {
|
|
219
|
+
return this.add(num * -1, unit, mutate);
|
|
220
|
+
}
|
|
215
221
|
absDiff(other, unit) {
|
|
216
222
|
return Math.abs(this.diff(other, unit));
|
|
217
223
|
}
|
|
@@ -367,6 +373,18 @@ export class LocalTime {
|
|
|
367
373
|
isOlderThan(n, unit, now) {
|
|
368
374
|
return this.isBefore(LocalTime.of(now !== null && now !== void 0 ? now : new Date()).add(-n, unit));
|
|
369
375
|
}
|
|
376
|
+
/**
|
|
377
|
+
* Checks if this localTime is younger than "now" by X units.
|
|
378
|
+
*
|
|
379
|
+
* Example:
|
|
380
|
+
*
|
|
381
|
+
* localTime(expirationDate).isYoungerThan(5, 'day')
|
|
382
|
+
*
|
|
383
|
+
* Third argument allows to override "now".
|
|
384
|
+
*/
|
|
385
|
+
isYoungerThan(n, unit, now) {
|
|
386
|
+
return !this.isOlderThan(n, unit, now);
|
|
387
|
+
}
|
|
370
388
|
/**
|
|
371
389
|
* Returns 1 if this > d
|
|
372
390
|
* returns 0 if they are equal
|
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
|
@@ -253,6 +253,19 @@ export class LocalDate {
|
|
|
253
253
|
return this.isBefore(LocalDate.of(today || new Date()).add(-n, unit))
|
|
254
254
|
}
|
|
255
255
|
|
|
256
|
+
/**
|
|
257
|
+
* Checks if this localDate is younger than "today" by X units.
|
|
258
|
+
*
|
|
259
|
+
* Example:
|
|
260
|
+
*
|
|
261
|
+
* localDate(expirationDate).isYoungerThan(5, 'day')
|
|
262
|
+
*
|
|
263
|
+
* Third argument allows to override "today".
|
|
264
|
+
*/
|
|
265
|
+
isYoungerThan(n: number, unit: LocalDateUnitStrict, today?: LocalDateInput): boolean {
|
|
266
|
+
return !this.isOlderThan(n, unit, today)
|
|
267
|
+
}
|
|
268
|
+
|
|
256
269
|
/**
|
|
257
270
|
* Returns 1 if this > d
|
|
258
271
|
* returns 0 if they are equal
|
|
@@ -419,6 +432,13 @@ export class LocalDate {
|
|
|
419
432
|
return this.add(-num, unit, mutate)
|
|
420
433
|
}
|
|
421
434
|
|
|
435
|
+
/**
|
|
436
|
+
* Alias to subtract
|
|
437
|
+
*/
|
|
438
|
+
minus(num: number, unit: LocalDateUnit, mutate = false): LocalDate {
|
|
439
|
+
return this.add(-num, unit, mutate)
|
|
440
|
+
}
|
|
441
|
+
|
|
422
442
|
startOf(unit: LocalDateUnitStrict): LocalDate {
|
|
423
443
|
if (unit === 'day') return this
|
|
424
444
|
if (unit === 'month') return LocalDate.create(this.$year, this.$month, 1)
|
|
@@ -284,6 +284,13 @@ export class LocalTime {
|
|
|
284
284
|
return this.add(num * -1, unit, mutate)
|
|
285
285
|
}
|
|
286
286
|
|
|
287
|
+
/**
|
|
288
|
+
* Alias to subtract.
|
|
289
|
+
*/
|
|
290
|
+
minus(num: number, unit: LocalTimeUnit, mutate = false): LocalTime {
|
|
291
|
+
return this.add(num * -1, unit, mutate)
|
|
292
|
+
}
|
|
293
|
+
|
|
287
294
|
absDiff(other: LocalTimeInput, unit: LocalTimeUnit): number {
|
|
288
295
|
return Math.abs(this.diff(other, unit))
|
|
289
296
|
}
|
|
@@ -453,6 +460,19 @@ export class LocalTime {
|
|
|
453
460
|
return this.isBefore(LocalTime.of(now ?? new Date()).add(-n, unit))
|
|
454
461
|
}
|
|
455
462
|
|
|
463
|
+
/**
|
|
464
|
+
* Checks if this localTime is younger than "now" by X units.
|
|
465
|
+
*
|
|
466
|
+
* Example:
|
|
467
|
+
*
|
|
468
|
+
* localTime(expirationDate).isYoungerThan(5, 'day')
|
|
469
|
+
*
|
|
470
|
+
* Third argument allows to override "now".
|
|
471
|
+
*/
|
|
472
|
+
isYoungerThan(n: number, unit: LocalTimeUnit, now?: LocalTimeInput): boolean {
|
|
473
|
+
return !this.isOlderThan(n, unit, now)
|
|
474
|
+
}
|
|
475
|
+
|
|
456
476
|
/**
|
|
457
477
|
* Returns 1 if this > d
|
|
458
478
|
* returns 0 if they are equal
|
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
|
}
|