@naturalcycles/js-lib 14.111.0 → 14.113.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.
@@ -39,7 +39,7 @@ export declare function _stringEnumEntries<T extends StringEnum>(en: T): [k: str
39
39
  */
40
40
  export declare function _numberEnumInverse<T extends NumberEnum>(en: T, v: string): T[keyof T];
41
41
  /**
42
- * _enumInverse, but allows to get/return undefined output.
42
+ * _numberEnumInverse, but allows to get/return undefined output.
43
43
  */
44
44
  export declare function _numberEnumInverseNullable<T extends NumberEnum>(en: T, v: string | undefined): T[keyof T] | undefined;
45
45
  /**
@@ -50,6 +50,14 @@ export declare function _numberEnumInverseNullable<T extends NumberEnum>(en: T,
50
50
  */
51
51
  export declare function _numberEnumNormalize<T extends NumberEnum>(en: T, v: string | number): T[keyof T];
52
52
  /**
53
- * Same as _enumNormalize, but allows to return undefined values.
53
+ * Same as _numberEnumNormalize, but allows to return undefined values.
54
54
  */
55
55
  export declare function _numberEnumNormalizeNullable<T extends NumberEnum>(en: T, v: string | number | undefined): T[keyof T] | undefined;
56
+ /**
57
+ * Returns a String key for given NumberEnum value, or undefined if not found.
58
+ */
59
+ export declare function _numberEnumKeyNullable<T extends NumberEnum>(en: T, v: T[keyof T] | undefined | null): keyof T | undefined;
60
+ /**
61
+ * Returns a String key for given NumberEnum value, throws if not found.
62
+ */
63
+ export declare function _numberEnumKey<T extends NumberEnum>(en: T, v: T[keyof T] | undefined | null): keyof T;
package/dist/enum.util.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports._numberEnumNormalizeNullable = exports._numberEnumNormalize = exports._numberEnumInverseNullable = exports._numberEnumInverse = exports._stringEnumEntries = exports._numberEnumEntries = exports._stringEnumValues = exports._stringEnumKeys = exports._numberEnumValues = exports._numberEnumKeys = void 0;
3
+ exports._numberEnumKey = exports._numberEnumKeyNullable = exports._numberEnumNormalizeNullable = exports._numberEnumNormalize = exports._numberEnumInverseNullable = exports._numberEnumInverse = exports._stringEnumEntries = exports._numberEnumEntries = exports._stringEnumValues = exports._stringEnumKeys = exports._numberEnumValues = exports._numberEnumKeys = void 0;
4
4
  /**
5
5
  * Returns all number keys of a number-enum.
6
6
  */
@@ -63,12 +63,12 @@ exports._stringEnumEntries = _stringEnumEntries;
63
63
  function _numberEnumInverse(en, v) {
64
64
  const r = en[v];
65
65
  if (!r)
66
- throw new Error(`enumInverse value not found for: ${v}`);
66
+ throw new Error(`_numberEnumInverse value not found for: ${v}`);
67
67
  return r;
68
68
  }
69
69
  exports._numberEnumInverse = _numberEnumInverse;
70
70
  /**
71
- * _enumInverse, but allows to get/return undefined output.
71
+ * _numberEnumInverse, but allows to get/return undefined output.
72
72
  */
73
73
  function _numberEnumInverseNullable(en, v) {
74
74
  return en[v];
@@ -83,14 +83,34 @@ exports._numberEnumInverseNullable = _numberEnumInverseNullable;
83
83
  function _numberEnumNormalize(en, v) {
84
84
  const r = _numberEnumNormalizeNullable(en, v);
85
85
  if (!r || !en[r])
86
- throw new Error(`enumNormalize value not found for: ${v}`);
86
+ throw new Error(`_numberEnumNormalize value not found for: ${v}`);
87
87
  return r;
88
88
  }
89
89
  exports._numberEnumNormalize = _numberEnumNormalize;
90
90
  /**
91
- * Same as _enumNormalize, but allows to return undefined values.
91
+ * Same as _numberEnumNormalize, but allows to return undefined values.
92
92
  */
93
93
  function _numberEnumNormalizeNullable(en, v) {
94
94
  return typeof v === 'string' ? en[v] : v;
95
95
  }
96
96
  exports._numberEnumNormalizeNullable = _numberEnumNormalizeNullable;
97
+ /**
98
+ * Returns a String key for given NumberEnum value, or undefined if not found.
99
+ */
100
+ function _numberEnumKeyNullable(en, v) {
101
+ const key = en[v];
102
+ // This prevents passing a Key (not a Value) of enum here, which returns unexpected result (number, not string)
103
+ return typeof key === 'string' ? key : undefined;
104
+ }
105
+ exports._numberEnumKeyNullable = _numberEnumKeyNullable;
106
+ /**
107
+ * Returns a String key for given NumberEnum value, throws if not found.
108
+ */
109
+ function _numberEnumKey(en, v) {
110
+ const key = en[v];
111
+ // This prevents passing a Key (not a Value) of enum here, which returns unexpected result (number, not string)
112
+ if (typeof key !== 'string')
113
+ throw new Error(`_enumKey value not found for: ${v}`);
114
+ return key;
115
+ }
116
+ exports._numberEnumKey = _numberEnumKey;
package/dist/types.d.ts CHANGED
@@ -196,3 +196,7 @@ export declare type FalsyValue = false | '' | 0 | null | undefined;
196
196
  * }
197
197
  */
198
198
  export declare function _typeCast<T>(v: any): asserts v is T;
199
+ /**
200
+ * Type-safe Object.assign that checks that part is indeed a Partial<T>
201
+ */
202
+ export declare const _objectAssign: <T extends AnyObject>(target: T, part: Partial<T>) => T;
package/dist/types.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports._typeCast = exports._objectKeys = exports._stringMapEntries = exports._stringMapValues = exports._passNothingPredicate = exports._passthroughPredicate = exports._noop = exports._passUndefinedMapper = exports._passthroughMapper = exports.SKIP = exports.END = void 0;
3
+ exports._objectAssign = exports._typeCast = exports._objectKeys = exports._stringMapEntries = exports._stringMapValues = exports._passNothingPredicate = exports._passthroughPredicate = exports._noop = exports._passUndefinedMapper = exports._passthroughMapper = exports.SKIP = exports.END = void 0;
4
4
  /**
5
5
  * Symbol to indicate END of Sequence.
6
6
  */
@@ -50,3 +50,7 @@ exports._objectKeys = Object.keys;
50
50
  */
51
51
  function _typeCast(v) { }
52
52
  exports._typeCast = _typeCast;
53
+ /**
54
+ * Type-safe Object.assign that checks that part is indeed a Partial<T>
55
+ */
56
+ exports._objectAssign = Object.assign;
@@ -54,11 +54,11 @@ export function _stringEnumEntries(en) {
54
54
  export function _numberEnumInverse(en, v) {
55
55
  const r = en[v];
56
56
  if (!r)
57
- throw new Error(`enumInverse value not found for: ${v}`);
57
+ throw new Error(`_numberEnumInverse value not found for: ${v}`);
58
58
  return r;
59
59
  }
60
60
  /**
61
- * _enumInverse, but allows to get/return undefined output.
61
+ * _numberEnumInverse, but allows to get/return undefined output.
62
62
  */
63
63
  export function _numberEnumInverseNullable(en, v) {
64
64
  return en[v];
@@ -72,12 +72,30 @@ export function _numberEnumInverseNullable(en, v) {
72
72
  export function _numberEnumNormalize(en, v) {
73
73
  const r = _numberEnumNormalizeNullable(en, v);
74
74
  if (!r || !en[r])
75
- throw new Error(`enumNormalize value not found for: ${v}`);
75
+ throw new Error(`_numberEnumNormalize value not found for: ${v}`);
76
76
  return r;
77
77
  }
78
78
  /**
79
- * Same as _enumNormalize, but allows to return undefined values.
79
+ * Same as _numberEnumNormalize, but allows to return undefined values.
80
80
  */
81
81
  export function _numberEnumNormalizeNullable(en, v) {
82
82
  return typeof v === 'string' ? en[v] : v;
83
83
  }
84
+ /**
85
+ * Returns a String key for given NumberEnum value, or undefined if not found.
86
+ */
87
+ export function _numberEnumKeyNullable(en, v) {
88
+ const key = en[v];
89
+ // This prevents passing a Key (not a Value) of enum here, which returns unexpected result (number, not string)
90
+ return typeof key === 'string' ? key : undefined;
91
+ }
92
+ /**
93
+ * Returns a String key for given NumberEnum value, throws if not found.
94
+ */
95
+ export function _numberEnumKey(en, v) {
96
+ const key = en[v];
97
+ // This prevents passing a Key (not a Value) of enum here, which returns unexpected result (number, not string)
98
+ if (typeof key !== 'string')
99
+ throw new Error(`_enumKey value not found for: ${v}`);
100
+ return key;
101
+ }
package/dist-esm/types.js CHANGED
@@ -41,3 +41,7 @@ export const _objectKeys = Object.keys;
41
41
  * }
42
42
  */
43
43
  export function _typeCast(v) { }
44
+ /**
45
+ * Type-safe Object.assign that checks that part is indeed a Partial<T>
46
+ */
47
+ export const _objectAssign = Object.assign;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@naturalcycles/js-lib",
3
- "version": "14.111.0",
3
+ "version": "14.113.0",
4
4
  "scripts": {
5
5
  "prepare": "husky install",
6
6
  "build-prod": "build-prod-esm-cjs",
@@ -16,7 +16,6 @@
16
16
  "@naturalcycles/nodejs-lib": "^12.33.4",
17
17
  "@naturalcycles/time-lib": "^3.5.1",
18
18
  "@types/node": "^18.0.0",
19
- "expect-type": "^0.13.0",
20
19
  "jest": "^29.0.0",
21
20
  "prettier": "^2.1.2",
22
21
  "rxjs": "^7.0.1",
package/src/enum.util.ts CHANGED
@@ -61,12 +61,12 @@ export function _stringEnumEntries<T extends StringEnum>(en: T): [k: string, v:
61
61
  */
62
62
  export function _numberEnumInverse<T extends NumberEnum>(en: T, v: string): T[keyof T] {
63
63
  const r = en[v as keyof T] as any
64
- if (!r) throw new Error(`enumInverse value not found for: ${v}`)
64
+ if (!r) throw new Error(`_numberEnumInverse value not found for: ${v}`)
65
65
  return r
66
66
  }
67
67
 
68
68
  /**
69
- * _enumInverse, but allows to get/return undefined output.
69
+ * _numberEnumInverse, but allows to get/return undefined output.
70
70
  */
71
71
  export function _numberEnumInverseNullable<T extends NumberEnum>(
72
72
  en: T,
@@ -83,12 +83,12 @@ export function _numberEnumInverseNullable<T extends NumberEnum>(
83
83
  */
84
84
  export function _numberEnumNormalize<T extends NumberEnum>(en: T, v: string | number): T[keyof T] {
85
85
  const r = _numberEnumNormalizeNullable(en, v)
86
- if (!r || !en[r as keyof T]) throw new Error(`enumNormalize value not found for: ${v}`)
86
+ if (!r || !en[r as keyof T]) throw new Error(`_numberEnumNormalize value not found for: ${v}`)
87
87
  return r
88
88
  }
89
89
 
90
90
  /**
91
- * Same as _enumNormalize, but allows to return undefined values.
91
+ * Same as _numberEnumNormalize, but allows to return undefined values.
92
92
  */
93
93
  export function _numberEnumNormalizeNullable<T extends NumberEnum>(
94
94
  en: T,
@@ -96,3 +96,28 @@ export function _numberEnumNormalizeNullable<T extends NumberEnum>(
96
96
  ): T[keyof T] | undefined {
97
97
  return typeof v === 'string' ? en[v as keyof T] : (v as any)
98
98
  }
99
+
100
+ /**
101
+ * Returns a String key for given NumberEnum value, or undefined if not found.
102
+ */
103
+ export function _numberEnumKeyNullable<T extends NumberEnum>(
104
+ en: T,
105
+ v: T[keyof T] | undefined | null,
106
+ ): keyof T | undefined {
107
+ const key = (en as any)[v]
108
+ // This prevents passing a Key (not a Value) of enum here, which returns unexpected result (number, not string)
109
+ return typeof key === 'string' ? key : undefined
110
+ }
111
+
112
+ /**
113
+ * Returns a String key for given NumberEnum value, throws if not found.
114
+ */
115
+ export function _numberEnumKey<T extends NumberEnum>(
116
+ en: T,
117
+ v: T[keyof T] | undefined | null,
118
+ ): keyof T {
119
+ const key = (en as any)[v]
120
+ // This prevents passing a Key (not a Value) of enum here, which returns unexpected result (number, not string)
121
+ if (typeof key !== 'string') throw new Error(`_enumKey value not found for: ${v}`)
122
+ return key
123
+ }
package/src/types.ts CHANGED
@@ -260,3 +260,11 @@ export type FalsyValue = false | '' | 0 | null | undefined
260
260
  * }
261
261
  */
262
262
  export function _typeCast<T>(v: any): asserts v is T {}
263
+
264
+ /**
265
+ * Type-safe Object.assign that checks that part is indeed a Partial<T>
266
+ */
267
+ export const _objectAssign = Object.assign as <T extends AnyObject>(
268
+ target: T,
269
+ part: Partial<T>,
270
+ ) => T