ts-gems 2.7.4 → 2.7.6

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.
@@ -1,4 +1,5 @@
1
1
  import { IfNoDeepValue } from './helpers.js';
2
+ import { OmitNever } from './omit.js';
2
3
 
3
4
  /**
4
5
  * Combination of Partial and Writable but deeply
@@ -6,7 +7,7 @@ import { IfNoDeepValue } from './helpers.js';
6
7
  export type DeepBuildable<T> = _DeepBuildable<T>;
7
8
  type _DeepBuildable<T> =
8
9
  IfNoDeepValue<T> extends true ? T
9
- : { -readonly [P in keyof T]?: _DeepBuildable<Exclude<T[P], undefined>> };
10
+ : OmitNever<{ -readonly [P in keyof T]?: _DeepBuildable<Exclude<T[P], undefined>> }>;
10
11
 
11
12
  /**
12
13
  * Combination of Partial and Writable but deeply including arrays
@@ -16,4 +17,4 @@ type _HighDeepBuildable<T> =
16
17
  T extends (infer U)[] ? _HighDeepBuildable<U>[]
17
18
  : IfNoDeepValue<T> extends true ? T
18
19
  : T extends (infer U)[] ? _HighDeepBuildable<U>[]
19
- : { -readonly [P in keyof T]?: _HighDeepBuildable<Exclude<T[P], undefined>> };
20
+ : OmitNever<{ -readonly [P in keyof T]?: _HighDeepBuildable<Exclude<T[P], undefined>> }>;
@@ -1,5 +1,6 @@
1
1
  import { IfNoDeepValue } from './helpers.js';
2
2
  import { OptionalKeys, ReadonlyKeys, RequiredKeys, WritableKeys } from './keys';
3
+ import { OmitNever } from './omit.js';
3
4
 
4
5
  /**
5
6
  * Omit all optional properties in T deeply
@@ -7,7 +8,7 @@ import { OptionalKeys, ReadonlyKeys, RequiredKeys, WritableKeys } from './keys';
7
8
  export type DeepOmitOptional<T> = _DeepOmitOptional<Exclude<T, undefined>>;
8
9
  type _DeepOmitOptional<T, K extends keyof T = Exclude<keyof T, OptionalKeys<T>>> =
9
10
  IfNoDeepValue<T> extends true ? T
10
- : { [P in K]-?: DeepOmitOptional<T[P]> };
11
+ : OmitNever<{ [P in K]-?: DeepOmitOptional<T[P]> }>;
11
12
 
12
13
  /**
13
14
  * Omit all optional properties in T deeply including arrays
@@ -16,7 +17,7 @@ export type HighDeepOmitOptional<T> = _HighDeepOmitOptional<Exclude<T, undefined
16
17
  type _HighDeepOmitOptional<T, K extends keyof T = Exclude<keyof T, OptionalKeys<T>>> =
17
18
  T extends (infer U)[] ? HighDeepOmitOptional<U>[]
18
19
  : IfNoDeepValue<T> extends true ? T
19
- : { [P in K]-?: HighDeepOmitOptional<T[P]> };
20
+ : OmitNever<{ [P in K]-?: HighDeepOmitOptional<T[P]> }>;
20
21
 
21
22
 
22
23
  /**
@@ -25,7 +26,7 @@ type _HighDeepOmitOptional<T, K extends keyof T = Exclude<keyof T, OptionalKeys<
25
26
  export type DeepOmitRequired<T> = _DeepOmitRequired<Exclude<T, undefined>>;
26
27
  type _DeepOmitRequired<T, J extends keyof T = Exclude<keyof T, RequiredKeys<T>>> =
27
28
  IfNoDeepValue<T> extends true ? T
28
- : { [P in J]?: DeepOmitRequired<Exclude<T[P], undefined>> };
29
+ : OmitNever<{ [P in J]?: DeepOmitRequired<Exclude<T[P], undefined>> }>;
29
30
 
30
31
 
31
32
  /**
@@ -35,7 +36,7 @@ export type HighDeepOmitRequired<T> = _HighDeepOmitRequired<Exclude<T, undefined
35
36
  type _HighDeepOmitRequired<T, J extends keyof T = Exclude<keyof T, RequiredKeys<T>>> =
36
37
  T extends (infer U)[] ? HighDeepOmitRequired<U>[]
37
38
  : IfNoDeepValue<T> extends true ? T
38
- : { [P in J]?: HighDeepOmitRequired<Exclude<T[P], undefined>> };
39
+ : OmitNever<{ [P in J]?: HighDeepOmitRequired<Exclude<T[P], undefined>> }>;
39
40
 
40
41
 
41
42
  /**
@@ -44,7 +45,7 @@ type _HighDeepOmitRequired<T, J extends keyof T = Exclude<keyof T, RequiredKeys<
44
45
  export type DeepOmitReadonly<T> = _DeepOmitReadonly<Exclude<T, undefined>>;
45
46
  type _DeepOmitReadonly<T, J extends keyof T = Exclude<keyof T, ReadonlyKeys<T>>> =
46
47
  IfNoDeepValue<T> extends true ? T
47
- : { [P in J]: DeepOmitReadonly<T[P]> };
48
+ : OmitNever<{ [P in J]: DeepOmitReadonly<T[P]> }>;
48
49
 
49
50
 
50
51
  /**
@@ -54,7 +55,7 @@ export type HighDeepOmitReadonly<T> = _HighDeepOmitReadonly<Exclude<T, undefined
54
55
  type _HighDeepOmitReadonly<T, J extends keyof T = Exclude<keyof T, ReadonlyKeys<T>>> =
55
56
  T extends (infer U)[] ? HighDeepOmitReadonly<U>[]
56
57
  : IfNoDeepValue<T> extends true ? T
57
- : { [P in J]: HighDeepOmitReadonly<T[P]> };
58
+ : OmitNever<{ [P in J]: HighDeepOmitReadonly<T[P]> }>;
58
59
 
59
60
 
60
61
  /**
@@ -63,7 +64,7 @@ type _HighDeepOmitReadonly<T, J extends keyof T = Exclude<keyof T, ReadonlyKeys<
63
64
  export type DeepOmitWritable<T> = _DeepOmitWritable<Exclude<T, undefined>>
64
65
  type _DeepOmitWritable<T, K extends keyof T = Exclude<keyof T, WritableKeys<T>>> =
65
66
  IfNoDeepValue<T> extends true ? T
66
- : { readonly [P in K]: DeepOmitWritable<T[P]> }
67
+ : OmitNever<{ readonly [P in K]: DeepOmitWritable<T[P]> }>
67
68
 
68
69
 
69
70
  /**
@@ -73,4 +74,4 @@ export type HighDeepOmitWritable<T> = _HighDeepOmitWritable<Exclude<T, undefined
73
74
  type _HighDeepOmitWritable<T, K extends keyof T = Exclude<keyof T, WritableKeys<T>>> =
74
75
  T extends (infer U)[] ? HighDeepOmitWritable<U>[]
75
76
  : IfNoDeepValue<T> extends true ? T
76
- : { readonly [P in K]: HighDeepOmitWritable<T[P]> }
77
+ : OmitNever<{ readonly [P in K]: HighDeepOmitWritable<T[P]> }>
@@ -1,5 +1,6 @@
1
1
  import { IfNoDeepValue } from './helpers.js';
2
2
  import { JsonKeys, OptionalKeys, ReadonlyKeys, RequiredKeys, WritableKeys } from './keys';
3
+ import { OmitNever } from './omit.js';
3
4
 
4
5
  /**
5
6
  * Pick all optional properties in T deeply
@@ -7,7 +8,7 @@ import { JsonKeys, OptionalKeys, ReadonlyKeys, RequiredKeys, WritableKeys } from
7
8
  export type DeepPickOptional<T> = _DeepPickOptional<Exclude<T, undefined>>;
8
9
  type _DeepPickOptional<T, K extends keyof T = OptionalKeys<T>> =
9
10
  IfNoDeepValue<T> extends true ? T
10
- : { [P in K]?: DeepPickOptional<T[P]> };
11
+ : OmitNever<{ [P in K]?: DeepPickOptional<T[P]> }>;
11
12
 
12
13
  /**
13
14
  * Pick all optional properties in T deeply including arrays
@@ -16,7 +17,7 @@ export type HighDeepPickOptional<T> = _HighDeepPickOptional<Exclude<T, undefined
16
17
  type _HighDeepPickOptional<T, K extends keyof T = OptionalKeys<T>> =
17
18
  T extends (infer U)[] ? HighDeepPickOptional<U>[]
18
19
  : IfNoDeepValue<T> extends true ? T
19
- : { [P in K]?: HighDeepPickOptional<T[P]> };
20
+ : OmitNever<{ [P in K]?: HighDeepPickOptional<T[P]> }>;
20
21
 
21
22
 
22
23
  /**
@@ -25,7 +26,7 @@ type _HighDeepPickOptional<T, K extends keyof T = OptionalKeys<T>> =
25
26
  export type DeepPickRequired<T> = _DeepPickRequired<Exclude<T, undefined>>;
26
27
  type _DeepPickRequired<T, J extends keyof T = RequiredKeys<T>> =
27
28
  IfNoDeepValue<T> extends true ? T
28
- : { [P in J]-?: DeepPickRequired<T[P]> };
29
+ : OmitNever<{ [P in J]-?: DeepPickRequired<T[P]> }>;
29
30
 
30
31
 
31
32
  /**
@@ -35,7 +36,7 @@ export type HighDeepPickRequired<T> = _HighDeepPickRequired<Exclude<T, undefined
35
36
  type _HighDeepPickRequired<T, J extends keyof T = RequiredKeys<T>> =
36
37
  T extends (infer U)[] ? HighDeepPickRequired<U>[]
37
38
  : IfNoDeepValue<T> extends true ? T
38
- : { [P in J]-?: HighDeepPickRequired<T[P]> };
39
+ : OmitNever<{ [P in J]-?: HighDeepPickRequired<T[P]> }>;
39
40
 
40
41
 
41
42
  /**
@@ -44,7 +45,7 @@ type _HighDeepPickRequired<T, J extends keyof T = RequiredKeys<T>> =
44
45
  export type DeepPickReadonly<T> = _DeepPickReadonly<Exclude<T, undefined>>;
45
46
  type _DeepPickReadonly<T, K extends keyof T = ReadonlyKeys<T>> =
46
47
  IfNoDeepValue<T> extends true ? T
47
- : { [P in K]: DeepPickReadonly<T[P]> };
48
+ : OmitNever<{ [P in K]: DeepPickReadonly<T[P]> }>;
48
49
 
49
50
  /**
50
51
  * Pick all readonly properties in T deeply including arrays
@@ -53,7 +54,7 @@ export type HighDeepPickReadonly<T> = _HighDeepPickReadonly<Exclude<T, undefined
53
54
  type _HighDeepPickReadonly<T, K extends keyof T = ReadonlyKeys<T>> =
54
55
  T extends (infer U)[] ? HighDeepPickReadonly<U>[]
55
56
  : IfNoDeepValue<T> extends true ? T
56
- : { [P in K]: HighDeepPickReadonly<T[P]> };
57
+ : OmitNever<{ [P in K]: HighDeepPickReadonly<T[P]> }>;
57
58
 
58
59
 
59
60
  /**
@@ -62,7 +63,7 @@ type _HighDeepPickReadonly<T, K extends keyof T = ReadonlyKeys<T>> =
62
63
  export type DeepPickWritable<T> = _DeepPickWritable<Exclude<T, undefined>>;
63
64
  type _DeepPickWritable<T, K extends keyof T = WritableKeys<T>> =
64
65
  IfNoDeepValue<T> extends true ? T
65
- : { [P in K]: DeepPickWritable<T[P]> };
66
+ : OmitNever<{ [P in K]: DeepPickWritable<T[P]> }>;
66
67
 
67
68
  /**
68
69
  * Pick all writable properties in T deeply including arrays
@@ -71,7 +72,7 @@ export type HighDeepPickWritable<T> = _HighDeepPickWritable<Exclude<T, undefined
71
72
  type _HighDeepPickWritable<T, K extends keyof T = WritableKeys<T>> =
72
73
  T extends (infer U)[] ? HighDeepPickWritable<U>[]
73
74
  : IfNoDeepValue<T> extends true ? T
74
- : { [P in K]: HighDeepPickWritable<T[P]> };
75
+ : OmitNever<{ [P in K]: HighDeepPickWritable<T[P]> }>;
75
76
 
76
77
 
77
78
  /**
@@ -81,4 +82,4 @@ export type DeepPickJson<T> = _DeepPickJson<Exclude<T, undefined>>;
81
82
  type _DeepPickJson<T, Keys extends keyof T = JsonKeys<T>> =
82
83
  T extends (infer U)[] ? DeepPickJson<U>[]
83
84
  : IfNoDeepValue<T> extends true ? T
84
- : { [P in Keys]: DeepPickJson<T[P]> };
85
+ : OmitNever<{ [P in Keys]: DeepPickJson<T[P]> }>;
@@ -1,4 +1,5 @@
1
1
  import { IfNoDeepValue } from './helpers.js';
2
+ import { OmitNever } from './omit.js';
2
3
 
3
4
  /**
4
5
  * Make all properties in T readonly deeply
@@ -6,7 +7,7 @@ import { IfNoDeepValue } from './helpers.js';
6
7
  export type DeepReadonly<T> = _DeepReadonly<T>;
7
8
  type _DeepReadonly<T> =
8
9
  IfNoDeepValue<T> extends true ? T
9
- : { readonly [P in keyof T]: _DeepReadonly<T[P]> };
10
+ : OmitNever<{ readonly [P in keyof T]: _DeepReadonly<T[P]> }>;
10
11
 
11
12
  /**
12
13
  * Make all properties in T readonly deeply
@@ -15,5 +16,5 @@ export type HighDeepReadonly<T> = _HighDeepReadonly<T>;
15
16
  type _HighDeepReadonly<T> =
16
17
  T extends (infer U)[] ? _HighDeepReadonly<U>[]
17
18
  : IfNoDeepValue<T> extends true ? T
18
- : { readonly [P in keyof T]: _HighDeepReadonly<T[P]> };
19
+ : OmitNever<{ readonly [P in keyof T]: _HighDeepReadonly<T[P]> }>;
19
20
 
@@ -1,4 +1,5 @@
1
1
  import { IfNoDeepValue } from './helpers.js';
2
+ import { OmitNever } from './omit.js';
2
3
 
3
4
  /**
4
5
  * Make all properties in T required deeply
@@ -6,7 +7,7 @@ import { IfNoDeepValue } from './helpers.js';
6
7
  export type DeepRequired<T> = _DeepRequired<T>;
7
8
  type _DeepRequired<T> =
8
9
  IfNoDeepValue<T> extends true ? T
9
- : { [P in keyof T]-?: _DeepRequired<Exclude<T[P], undefined>> };
10
+ : OmitNever<{ [P in keyof T]-?: _DeepRequired<Exclude<T[P], undefined>> }>;
10
11
 
11
12
 
12
13
  /**
@@ -16,4 +17,4 @@ export type HighDeepRequired<T> = _HighDeepRequired<T>;
16
17
  type _HighDeepRequired<T> =
17
18
  T extends (infer U)[] ? _HighDeepRequired<U>[]
18
19
  : IfNoDeepValue<T> extends true ? T
19
- : { [P in keyof T]-?: _HighDeepRequired<Exclude<T[P], undefined>> };
20
+ : OmitNever<{ [P in keyof T]-?: _HighDeepRequired<Exclude<T[P], undefined>> }>;
@@ -1,4 +1,5 @@
1
1
  import { IfNoDeepValue } from './helpers.js';
2
+ import { OmitNever } from './omit.js';
2
3
 
3
4
  /**
4
5
  * Make all properties in T writable deeply
@@ -6,7 +7,7 @@ import { IfNoDeepValue } from './helpers.js';
6
7
  export type DeepWritable<T> = _DeepWritable<T>;
7
8
  type _DeepWritable<T> =
8
9
  IfNoDeepValue<T> extends true ? T
9
- : { -readonly [P in keyof T]: _DeepWritable<T[P]> };
10
+ : OmitNever<{ -readonly [P in keyof T]: _DeepWritable<T[P]> }>;
10
11
 
11
12
 
12
13
  /**
@@ -16,4 +17,4 @@ export type HighDeepWritable<T> = _HighDeepWritable<T>;
16
17
  type _HighDeepWritable<T> =
17
18
  T extends (infer U)[] ? _HighDeepWritable<U>[]
18
19
  : IfNoDeepValue<T> extends true ? T
19
- : { -readonly [P in keyof T]: _HighDeepWritable<T[P]> };
20
+ : OmitNever<{ -readonly [P in keyof T]: _HighDeepWritable<T[P]> }>;
package/lib/helpers.d.ts CHANGED
@@ -8,12 +8,13 @@ export type IfNoDeepValue<T> = _IfNoDeepValue<T>
8
8
  type _IfNoDeepValue<T> =
9
9
  T extends Builtin ? true
10
10
  : IfTuple<T> extends true ? true
11
- : IfClass<T> extends true ? true
12
- : T extends Map<any, any> ? true
13
- : T extends ReadonlyMap<any, any> ? true
14
- : T extends WeakMap<any, any> ? true
15
- : T extends Set<any> ? true
16
- : T extends ReadonlySet<any> ? true
17
- : T extends WeakSet<any> ? true
18
- : T extends any[] ? true
19
- : false;
11
+ : T extends Function ? true
12
+ : IfClass<T> extends true ? true
13
+ : T extends Map<any, any> ? true
14
+ : T extends ReadonlyMap<any, any> ? true
15
+ : T extends WeakMap<any, any> ? true
16
+ : T extends Set<any> ? true
17
+ : T extends ReadonlySet<any> ? true
18
+ : T extends WeakSet<any> ? true
19
+ : T extends any[] ? true
20
+ : false;
package/lib/index.d.ts CHANGED
@@ -10,5 +10,6 @@ export * from "./deep-pick";
10
10
  export * from "./deep-readonly";
11
11
  export * from "./deep-required";
12
12
  export * from "./deep-writable";
13
+ export * from "./helpers";
13
14
  export * from "./pick";
14
15
  export * from "./omit";
package/lib/keys.d.ts CHANGED
@@ -110,3 +110,9 @@ type _KeysEquals<T, U> = ValuesOf<{
110
110
  : IfEquals<T[K], U, K, never>;
111
111
  }>;
112
112
 
113
+ /**
114
+ * @desc Returns keys that property value type is not "never"
115
+ */
116
+ export type NonNeverKeys<T> = ValuesOf<{
117
+ [K in keyof T]: K
118
+ }>;
package/lib/omit.d.ts CHANGED
@@ -6,30 +6,60 @@ import {
6
6
  WritableKeys
7
7
  } from './keys';
8
8
 
9
+ /**
10
+ * OmitNever<T> is a type that omits all properties with a value of type "never".
11
+ *
12
+ * @template T - The original type
13
+ *
14
+ * @example
15
+ * type MyType = {
16
+ * a: string;
17
+ * b: number;
18
+ * c?: never;
19
+ * };
20
+ *
21
+ * type Result = OmitNever<MyType>;
22
+ * // Result is:
23
+ * // {
24
+ * // a: string;
25
+ * // b: number;
26
+ * // }
27
+ */
28
+ export type OmitNever<T> = {
29
+ [K in keyof T as (Exclude<T[K], undefined> extends never ? never : K)]: T[K]
30
+ };
31
+
32
+ /**
33
+ * Construct a type with the properties of T except for those in type K,
34
+ * while preserving strict type checking.
35
+ *
36
+ * @template T - The original type.
37
+ * @template K - The keys of the properties to be removed from the original type.
38
+ */
9
39
  export type StrictOmit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
10
40
 
11
41
  /**
12
42
  * Omit all optional properties in T
13
43
  */
14
- export type OmitOptional<T> = Omit<T, OptionalKeys<T>>;
44
+ export type OmitOptional<T> = OmitNever<Omit<T, OptionalKeys<T>>>;
15
45
 
16
46
  /**
17
47
  * Omit all required properties in T
18
48
  */
19
- export type OmitRequired<T> = Omit<T, RequiredKeys<T>>;
49
+ export type OmitRequired<T> = OmitNever<Omit<T, RequiredKeys<T>>>;
20
50
 
21
51
  /**
22
52
  * Omit all readonly properties in T
23
53
  */
24
- export type OmitReadonly<T> = Omit<T, ReadonlyKeys<T>>;
54
+ export type OmitReadonly<T> = OmitNever<Omit<T, ReadonlyKeys<T>>>;
25
55
 
26
56
 
27
57
  /**
28
58
  * Omit all writable properties in T
29
59
  */
30
- export type OmitWritable<T> = Omit<T, WritableKeys<T>>;
60
+ export type OmitWritable<T> = OmitNever<Omit<T, WritableKeys<T>>>;
31
61
 
32
62
  /**
33
63
  * Omit all JSON friendly properties in T
34
64
  */
35
- export type OmitJson<T> = Omit<T, JsonKeys<T>>;
65
+ export type OmitJson<T> = OmitNever<Omit<T, JsonKeys<T>>>;
package/package.json CHANGED
@@ -12,7 +12,7 @@
12
12
  "lodash",
13
13
  "underscore"
14
14
  ],
15
- "version": "2.7.4",
15
+ "version": "2.7.6",
16
16
  "types": "lib/index.d.ts",
17
17
  "main": "lib/index.js",
18
18
  "module": "lib/index.js",