ts-gems 2.4.1 → 2.6.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/lib/deep-buildable.d.ts +19 -0
- package/lib/deep-nullish.d.ts +21 -0
- package/lib/deep-omit.d.ts +49 -61
- package/lib/deep-partial.d.ts +18 -0
- package/lib/deep-pick.d.ts +41 -123
- package/lib/deep-readonly.d.ts +19 -0
- package/lib/deep-required.d.ts +19 -0
- package/lib/deep-writable.d.ts +19 -0
- package/lib/helpers.d.ts +19 -0
- package/lib/index.d.ts +7 -2
- package/lib/modify.d.ts +5 -0
- package/package.json +5 -5
- package/lib/deep-modify.d.ts +0 -106
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { IsDeepExcluded } from './helpers.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Combination of Partial and Writable but deeply
|
|
5
|
+
*/
|
|
6
|
+
export type DeepBuildable<T> = _DeepBuildable<T>;
|
|
7
|
+
type _DeepBuildable<T> =
|
|
8
|
+
IsDeepExcluded<T> extends true ? T
|
|
9
|
+
: { -readonly [P in keyof T]?: _DeepBuildable<Exclude<T[P], undefined>> };
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Combination of Partial and Writable but deeply including arrays
|
|
13
|
+
*/
|
|
14
|
+
export type HighDeepBuildable<T> = _HighDeepBuildable<T>;
|
|
15
|
+
type _HighDeepBuildable<T> =
|
|
16
|
+
T extends (infer U)[] ? _HighDeepBuildable<U>[]
|
|
17
|
+
: IsDeepExcluded<T> extends true ? T
|
|
18
|
+
: T extends (infer U)[] ? _HighDeepBuildable<U>[]
|
|
19
|
+
: { -readonly [P in keyof T]?: _HighDeepBuildable<Exclude<T[P], undefined>> };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { DeepRequired, HighDeepRequired } from './deep-required.js';
|
|
2
|
+
import { IsDeepExcluded } from './helpers.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Make all properties in T nullable deeply
|
|
6
|
+
*/
|
|
7
|
+
export type DeepNullish<T> = _DeepNullish<DeepRequired<T>>;
|
|
8
|
+
type _DeepNullish<T> =
|
|
9
|
+
IsDeepExcluded<T> extends true ? T
|
|
10
|
+
: { [P in keyof T]: _DeepNullish<Exclude<T[P], undefined>> | null | undefined };
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Make all properties in T nullable deeply including arrays
|
|
15
|
+
*/
|
|
16
|
+
export type HighDeepNullish<T> = _HighDeepNullish<HighDeepRequired<T>>;
|
|
17
|
+
type _HighDeepNullish<T> =
|
|
18
|
+
T extends (infer U)[] ? _HighDeepNullish<U>[]
|
|
19
|
+
: IsDeepExcluded<T> extends true ? T
|
|
20
|
+
: { [P in keyof T]: _HighDeepNullish<Exclude<T[P], undefined>> | null | undefined };
|
|
21
|
+
|
package/lib/deep-omit.d.ts
CHANGED
|
@@ -1,88 +1,76 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { JsonKeys, OptionalKeys, ReadonlyKeys, RequiredKeys, WritableKeys } from './keys';
|
|
1
|
+
import { IsDeepExcluded } from './helpers.js';
|
|
2
|
+
import { OptionalKeys, ReadonlyKeys, RequiredKeys, WritableKeys } from './keys';
|
|
4
3
|
|
|
5
4
|
/**
|
|
6
5
|
* Omit all optional properties in T deeply
|
|
7
6
|
*/
|
|
8
7
|
export type DeepOmitOptional<T> = _DeepOmitOptional<T>;
|
|
9
8
|
type _DeepOmitOptional<T, K extends keyof T = Exclude<keyof T, OptionalKeys<T>>> =
|
|
10
|
-
T extends
|
|
11
|
-
:
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
9
|
+
IsDeepExcluded<T> extends true ? T
|
|
10
|
+
: { [P in K]: _DeepOmitOptional<Exclude<T[P], undefined>> };
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Omit all optional properties in T deeply including arrays
|
|
14
|
+
*/
|
|
15
|
+
export type HighDeepOmitOptional<T> = _HighDeepOmitOptional<T>;
|
|
16
|
+
type _HighDeepOmitOptional<T, K extends keyof T = Exclude<keyof T, OptionalKeys<T>>> =
|
|
17
|
+
T extends (infer U)[] ? _HighDeepOmitOptional<U>[]
|
|
18
|
+
: IsDeepExcluded<T> extends true ? T
|
|
19
|
+
: { [P in K]: _HighDeepOmitOptional<Exclude<T[P], undefined>> };
|
|
20
|
+
|
|
21
21
|
|
|
22
22
|
/**
|
|
23
23
|
* Omit all required properties in T deeply
|
|
24
24
|
*/
|
|
25
25
|
export type DeepOmitRequired<T> = _DeepOmitRequired<T>;
|
|
26
26
|
type _DeepOmitRequired<T, J extends keyof T = Exclude<keyof T, RequiredKeys<T>>> =
|
|
27
|
-
T extends
|
|
28
|
-
:
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
27
|
+
IsDeepExcluded<T> extends true ? T
|
|
28
|
+
: { [P in J]: _DeepOmitRequired<Exclude<T[P], undefined>> };
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Omit all required properties in T deeply including arrays
|
|
33
|
+
*/
|
|
34
|
+
export type HighDeepOmitRequired<T> = _HighDeepOmitRequired<T>;
|
|
35
|
+
type _HighDeepOmitRequired<T, J extends keyof T = Exclude<keyof T, RequiredKeys<T>>> =
|
|
36
|
+
T extends (infer U)[] ? _HighDeepOmitRequired<U>[]
|
|
37
|
+
: IsDeepExcluded<T> extends true ? T
|
|
38
|
+
: { [P in J]: _HighDeepOmitRequired<Exclude<T[P], undefined>> };
|
|
39
|
+
|
|
38
40
|
|
|
39
41
|
/**
|
|
40
42
|
* Omit all readonly properties in T deeply
|
|
41
43
|
*/
|
|
42
44
|
export type DeepOmitReadonly<T> = _DeepOmitReadonly<T>;
|
|
43
45
|
type _DeepOmitReadonly<T, J extends keyof T = Exclude<keyof T, ReadonlyKeys<T>>> =
|
|
44
|
-
T extends
|
|
45
|
-
:
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
46
|
+
IsDeepExcluded<T> extends true ? T
|
|
47
|
+
: { [P in J]: _DeepOmitReadonly<Exclude<T[P], undefined>> };
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Omit all readonly properties in T deeply including arrays
|
|
52
|
+
*/
|
|
53
|
+
export type HighDeepOmitReadonly<T> = _HighDeepOmitReadonly<T>;
|
|
54
|
+
type _HighDeepOmitReadonly<T, J extends keyof T = Exclude<keyof T, ReadonlyKeys<T>>> =
|
|
55
|
+
T extends (infer U)[] ? _HighDeepOmitReadonly<U>[]
|
|
56
|
+
: IsDeepExcluded<T> extends true ? T
|
|
57
|
+
: { [P in J]: _HighDeepOmitReadonly<Exclude<T[P], undefined>> };
|
|
58
|
+
|
|
55
59
|
|
|
56
60
|
/**
|
|
57
61
|
* Omit all writable properties in T deeply
|
|
58
62
|
*/
|
|
59
63
|
export type DeepOmitWritable<T> = _DeepOmitWritable<T>
|
|
60
64
|
type _DeepOmitWritable<T, K extends keyof T = Exclude<keyof T, WritableKeys<T>>> =
|
|
61
|
-
T extends
|
|
62
|
-
:
|
|
63
|
-
|
|
64
|
-
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepOmitWritable<V>>
|
|
65
|
-
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepOmitWritable<V>>
|
|
66
|
-
: T extends Set<infer U> ? Set<DeepOmitWritable<U>>
|
|
67
|
-
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepOmitWritable<U>>
|
|
68
|
-
: T extends WeakSet<infer U> ? WeakSet<DeepOmitWritable<U>>
|
|
69
|
-
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepOmitWritable<T[K]> }
|
|
70
|
-
: T extends (infer U)[] ? DeepOmitWritable<U>[]
|
|
71
|
-
: { [P in K]: DeepOmitWritable<Exclude<T[P], undefined>> }
|
|
65
|
+
IsDeepExcluded<T> extends true ? T
|
|
66
|
+
: { [P in K]: _DeepOmitWritable<Exclude<T[P], undefined>> }
|
|
67
|
+
|
|
72
68
|
|
|
73
69
|
/**
|
|
74
|
-
* Omit all
|
|
70
|
+
* Omit all writable properties in T deeply including arrays
|
|
75
71
|
*/
|
|
76
|
-
export type
|
|
77
|
-
type
|
|
78
|
-
T extends
|
|
79
|
-
: T extends
|
|
80
|
-
:
|
|
81
|
-
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepOmitJson<V>>
|
|
82
|
-
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepOmitJson<V>>
|
|
83
|
-
: T extends Set<infer U> ? Set<DeepOmitJson<U>>
|
|
84
|
-
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepOmitJson<U>>
|
|
85
|
-
: T extends WeakSet<infer U> ? WeakSet<DeepOmitJson<U>>
|
|
86
|
-
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepOmitJson<T[K]> }
|
|
87
|
-
: T extends (infer U)[] ? DeepOmitJson<U>[]
|
|
88
|
-
: { [P in K]: DeepOmitJson<Exclude<T[P], undefined>> };
|
|
72
|
+
export type HighDeepOmitWritable<T> = _HighDeepOmitWritable<T>
|
|
73
|
+
type _HighDeepOmitWritable<T, K extends keyof T = Exclude<keyof T, WritableKeys<T>>> =
|
|
74
|
+
T extends (infer U)[] ? _HighDeepOmitWritable<U>[]
|
|
75
|
+
: IsDeepExcluded<T> extends true ? T
|
|
76
|
+
: { [P in K]: _HighDeepOmitWritable<Exclude<T[P], undefined>> }
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { IsDeepExcluded } from './helpers.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Partial but deeply
|
|
5
|
+
*/
|
|
6
|
+
export type DeepPartial<T> = _DeepPartial<T>;
|
|
7
|
+
type _DeepPartial<T> =
|
|
8
|
+
IsDeepExcluded<T> extends true ? T
|
|
9
|
+
: { [P in keyof T]?: _DeepPartial<Exclude<T[P], undefined>> };
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Partial but deeply including arrays
|
|
13
|
+
*/
|
|
14
|
+
export type HighDeepPartial<T> = _HighDeepPartial<T>;
|
|
15
|
+
type _HighDeepPartial<T> =
|
|
16
|
+
T extends (infer U)[] ? _HighDeepPartial<U>[]
|
|
17
|
+
: IsDeepExcluded<T> extends true ? T
|
|
18
|
+
: { [P in keyof T]?: _HighDeepPartial<Exclude<T[P], undefined>> };
|
package/lib/deep-pick.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { IfClass, IfTuple } from './type-check';
|
|
1
|
+
import { IsDeepExcluded } from './helpers.js';
|
|
3
2
|
import { JsonKeys, OptionalKeys, ReadonlyKeys, RequiredKeys, WritableKeys } from './keys';
|
|
4
3
|
|
|
5
4
|
/**
|
|
@@ -7,72 +6,36 @@ import { JsonKeys, OptionalKeys, ReadonlyKeys, RequiredKeys, WritableKeys } from
|
|
|
7
6
|
*/
|
|
8
7
|
export type DeepPickOptional<T> = _DeepPickOptional<T>;
|
|
9
8
|
type _DeepPickOptional<T, K extends keyof T = OptionalKeys<T>> =
|
|
10
|
-
T extends
|
|
11
|
-
:
|
|
12
|
-
: IfClass<T> extends true ? T
|
|
13
|
-
: T extends Promise<infer U> ? Promise<DeepPickOptional<U>>
|
|
14
|
-
: T extends Map<any, any> ? T
|
|
15
|
-
: T extends ReadonlyMap<any, any> ? T
|
|
16
|
-
: T extends WeakMap<any, any> ? T
|
|
17
|
-
: T extends Set<any> ? T
|
|
18
|
-
: T extends ReadonlySet<any> ? T
|
|
19
|
-
: T extends WeakSet<any> ? T
|
|
20
|
-
: T extends any[] ? T
|
|
21
|
-
: { [P in K]?: DeepPickOptional<Exclude<T[P], undefined>> };
|
|
9
|
+
IsDeepExcluded<T> extends true ? T
|
|
10
|
+
: { [P in K]?: _DeepPickOptional<Exclude<T[P], undefined>> };
|
|
22
11
|
|
|
23
12
|
/**
|
|
24
|
-
* Pick all optional properties in T deeply
|
|
13
|
+
* Pick all optional properties in T deeply including arrays
|
|
25
14
|
*/
|
|
26
|
-
export type
|
|
27
|
-
type
|
|
28
|
-
T extends
|
|
29
|
-
:
|
|
30
|
-
:
|
|
31
|
-
|
|
32
|
-
: T extends Map<infer K, infer V> ? Map<K, StrictDeepPickOptional<V>>
|
|
33
|
-
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, StrictDeepPickOptional<V>>
|
|
34
|
-
: T extends WeakMap<infer K, infer V> ? WeakMap<K, StrictDeepPickOptional<V>>
|
|
35
|
-
: T extends Set<infer U> ? Set<StrictDeepPickOptional<U>>
|
|
36
|
-
: T extends ReadonlySet<infer U> ? ReadonlySet<StrictDeepPickOptional<U>>
|
|
37
|
-
: T extends WeakSet<infer U> ? WeakSet<StrictDeepPickOptional<U>>
|
|
38
|
-
: T extends (infer U)[] ? StrictDeepPickOptional<U>[]
|
|
39
|
-
: { [P in K]?: StrictDeepPickOptional<Exclude<T[P], undefined>> };
|
|
15
|
+
export type HighDeepPickOptional<T> = _HighDeepPickOptional<T>;
|
|
16
|
+
type _HighDeepPickOptional<T, K extends keyof T = OptionalKeys<T>> =
|
|
17
|
+
T extends (infer U)[] ? _HighDeepPickOptional<U>[]
|
|
18
|
+
: IsDeepExcluded<T> extends true ? T
|
|
19
|
+
: { [P in K]?: _HighDeepPickOptional<Exclude<T[P], undefined>> };
|
|
20
|
+
|
|
40
21
|
|
|
41
22
|
/**
|
|
42
|
-
* Pick all required properties in T deeply
|
|
23
|
+
* Pick all required properties in T deeply
|
|
43
24
|
*/
|
|
44
25
|
export type DeepPickRequired<T> = _DeepPickRequired<T>;
|
|
45
26
|
type _DeepPickRequired<T, J extends keyof T = RequiredKeys<T>> =
|
|
46
|
-
T extends
|
|
47
|
-
:
|
|
48
|
-
|
|
49
|
-
: T extends Promise<infer U> ? Promise<DeepPickRequired<U>>
|
|
50
|
-
: T extends Map<any, any> ? T
|
|
51
|
-
: T extends ReadonlyMap<any, any> ? T
|
|
52
|
-
: T extends WeakMap<any, any> ? T
|
|
53
|
-
: T extends Set<any> ? T
|
|
54
|
-
: T extends ReadonlySet<any> ? T
|
|
55
|
-
: T extends WeakSet<any> ? T
|
|
56
|
-
: T extends any[] ? T
|
|
57
|
-
: { [P in J]-?: DeepPickRequired<Exclude<T[P], undefined>> };
|
|
27
|
+
IsDeepExcluded<T> extends true ? T
|
|
28
|
+
: { [P in J]-?: DeepPickRequired<Exclude<T[P], undefined>> };
|
|
29
|
+
|
|
58
30
|
|
|
59
31
|
/**
|
|
60
|
-
* Pick all required properties in T deeply
|
|
32
|
+
* Pick all required properties in T deeply including arrays
|
|
61
33
|
*/
|
|
62
|
-
export type
|
|
63
|
-
type
|
|
64
|
-
T extends
|
|
65
|
-
:
|
|
66
|
-
:
|
|
67
|
-
: T extends Promise<infer U> ? Promise<StrictDeepPickRequired<U>>
|
|
68
|
-
: T extends Map<infer K, infer V> ? Map<K, StrictDeepPickRequired<V>>
|
|
69
|
-
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, StrictDeepPickRequired<V>>
|
|
70
|
-
: T extends WeakMap<infer K, infer V> ? WeakMap<K, StrictDeepPickRequired<V>>
|
|
71
|
-
: T extends Set<infer U> ? Set<StrictDeepPickRequired<U>>
|
|
72
|
-
: T extends ReadonlySet<infer U> ? ReadonlySet<StrictDeepPickRequired<U>>
|
|
73
|
-
: T extends WeakSet<infer U> ? WeakSet<StrictDeepPickRequired<U>>
|
|
74
|
-
: T extends (infer U)[] ? StrictDeepPickRequired<U>[]
|
|
75
|
-
: { [P in J]-?: StrictDeepPickRequired<Exclude<T[P], undefined>> };
|
|
34
|
+
export type HighDeepPickRequired<T> = _HighDeepPickRequired<T>;
|
|
35
|
+
type _HighDeepPickRequired<T, J extends keyof T = RequiredKeys<T>> =
|
|
36
|
+
T extends (infer U)[] ? _HighDeepPickRequired<U>[]
|
|
37
|
+
: IsDeepExcluded<T> extends true ? T
|
|
38
|
+
: { [P in J]-?: _HighDeepPickRequired<Exclude<T[P], undefined>> };
|
|
76
39
|
|
|
77
40
|
|
|
78
41
|
/**
|
|
@@ -80,87 +43,42 @@ type _StrictDeepPickRequired<T, J extends keyof T = RequiredKeys<T>> =
|
|
|
80
43
|
*/
|
|
81
44
|
export type DeepPickReadonly<T> = _DeepPickReadonly<T>;
|
|
82
45
|
type _DeepPickReadonly<T, K extends keyof T = ReadonlyKeys<T>> =
|
|
83
|
-
T extends
|
|
84
|
-
:
|
|
85
|
-
: IfClass<T> extends true ? T
|
|
86
|
-
: T extends Promise<infer U> ? Promise<DeepPickReadonly<U>>
|
|
87
|
-
: T extends Map<any, any> ? T
|
|
88
|
-
: T extends ReadonlyMap<any, any> ? T
|
|
89
|
-
: T extends WeakMap<any, any> ? T
|
|
90
|
-
: T extends Set<any> ? T
|
|
91
|
-
: T extends ReadonlySet<any> ? T
|
|
92
|
-
: T extends WeakSet<any> ? T
|
|
93
|
-
: T extends any[] ? T
|
|
94
|
-
: { [P in K]: DeepPickReadonly<Exclude<T[P], undefined>> };
|
|
46
|
+
IsDeepExcluded<T> extends true ? T
|
|
47
|
+
: { [P in K]: DeepPickReadonly<Exclude<T[P], undefined>> };
|
|
95
48
|
|
|
96
49
|
/**
|
|
97
|
-
* Pick all readonly properties in T deeply
|
|
50
|
+
* Pick all readonly properties in T deeply including arrays
|
|
98
51
|
*/
|
|
99
|
-
export type
|
|
100
|
-
type
|
|
101
|
-
T extends
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
: T extends Map<infer K, infer V> ? Map<K, StrictDeepPickReadonly<V>>
|
|
106
|
-
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, StrictDeepPickReadonly<V>>
|
|
107
|
-
: T extends WeakMap<infer K, infer V> ? WeakMap<K, StrictDeepPickReadonly<V>>
|
|
108
|
-
: T extends Set<infer U> ? Set<StrictDeepPickReadonly<U>>
|
|
109
|
-
: T extends ReadonlySet<infer U> ? ReadonlySet<StrictDeepPickReadonly<U>>
|
|
110
|
-
: T extends WeakSet<infer U> ? WeakSet<StrictDeepPickReadonly<U>>
|
|
111
|
-
: T extends (infer U)[] ? StrictDeepPickReadonly<U>[]
|
|
112
|
-
: { [P in J]: StrictDeepPickReadonly<Exclude<T[P], undefined>> };
|
|
52
|
+
export type HighDeepPickReadonly<T> = _HighDeepPickReadonly<T>;
|
|
53
|
+
type _HighDeepPickReadonly<T, K extends keyof T = ReadonlyKeys<T>> =
|
|
54
|
+
T extends (infer U)[] ? _HighDeepPickReadonly<U>[]
|
|
55
|
+
: IsDeepExcluded<T> extends true ? T
|
|
56
|
+
: { [P in K]: _HighDeepPickReadonly<Exclude<T[P], undefined>> };
|
|
57
|
+
|
|
113
58
|
|
|
114
59
|
/**
|
|
115
60
|
* Pick all writable properties in T deeply
|
|
116
61
|
*/
|
|
117
62
|
export type DeepPickWritable<T> = _DeepPickWritable<T>;
|
|
118
63
|
type _DeepPickWritable<T, K extends keyof T = WritableKeys<T>> =
|
|
119
|
-
T extends
|
|
120
|
-
:
|
|
121
|
-
: IfClass<T> extends true ? T
|
|
122
|
-
: T extends Promise<infer U> ? Promise<DeepPickWritable<U>>
|
|
123
|
-
: T extends Map<any, any> ? T
|
|
124
|
-
: T extends ReadonlyMap<any, any> ? T
|
|
125
|
-
: T extends WeakMap<any, any> ? T
|
|
126
|
-
: T extends Set<any> ? T
|
|
127
|
-
: T extends ReadonlySet<any> ? T
|
|
128
|
-
: T extends WeakSet<any> ? T
|
|
129
|
-
: T extends any[] ? T
|
|
130
|
-
: { [P in K]: DeepPickWritable<Exclude<T[P], undefined>> };
|
|
64
|
+
IsDeepExcluded<T> extends true ? T
|
|
65
|
+
: { [P in K]: DeepPickWritable<Exclude<T[P], undefined>> };
|
|
131
66
|
|
|
132
67
|
/**
|
|
133
|
-
* Pick all writable properties in T deeply
|
|
68
|
+
* Pick all writable properties in T deeply including arrays
|
|
134
69
|
*/
|
|
135
|
-
export type
|
|
136
|
-
type
|
|
137
|
-
T extends
|
|
138
|
-
:
|
|
139
|
-
:
|
|
140
|
-
|
|
141
|
-
: T extends Map<infer K, infer V> ? Map<K, StrictDeepPickWritable<V>>
|
|
142
|
-
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, StrictDeepPickWritable<V>>
|
|
143
|
-
: T extends WeakMap<infer K, infer V> ? WeakMap<K, StrictDeepPickWritable<V>>
|
|
144
|
-
: T extends Set<infer U> ? Set<StrictDeepPickWritable<U>>
|
|
145
|
-
: T extends ReadonlySet<infer U> ? ReadonlySet<StrictDeepPickWritable<U>>
|
|
146
|
-
: T extends WeakSet<infer U> ? WeakSet<StrictDeepPickWritable<U>>
|
|
147
|
-
: T extends (infer U)[] ? StrictDeepPickWritable<U>[]
|
|
148
|
-
: { -readonly [P in K]: StrictDeepPickWritable<Exclude<T[P], undefined>> }
|
|
70
|
+
export type HighDeepPickWritable<T> = _HighDeepPickWritable<T>;
|
|
71
|
+
type _HighDeepPickWritable<T, K extends keyof T = WritableKeys<T>> =
|
|
72
|
+
T extends (infer U)[] ? _HighDeepPickWritable<U>[]
|
|
73
|
+
: IsDeepExcluded<T> extends true ? T
|
|
74
|
+
: { [P in K]: _HighDeepPickWritable<Exclude<T[P], undefined>> };
|
|
75
|
+
|
|
149
76
|
|
|
150
77
|
/**
|
|
151
78
|
* Pick all JSON friendly properties in T deeply
|
|
152
79
|
*/
|
|
153
80
|
export type DeepPickJson<T> = _DeepPickJson<T>
|
|
154
81
|
type _DeepPickJson<T, Keys extends keyof T = JsonKeys<T>> =
|
|
155
|
-
T extends
|
|
156
|
-
:
|
|
157
|
-
:
|
|
158
|
-
: T extends Promise<infer U> ? Promise<DeepPickJson<U>>
|
|
159
|
-
: T extends Map<any, any> ? T
|
|
160
|
-
: T extends ReadonlyMap<any, any> ? T
|
|
161
|
-
: T extends WeakMap<any, any> ? T
|
|
162
|
-
: T extends Set<any> ? T
|
|
163
|
-
: T extends ReadonlySet<any> ? T
|
|
164
|
-
: T extends WeakSet<any> ? T
|
|
165
|
-
: T extends any[] ? T
|
|
166
|
-
: { [P in Keys]: DeepPickJson<Exclude<T[P], undefined>> };
|
|
82
|
+
T extends (infer U)[] ? _DeepPickJson<U>[]
|
|
83
|
+
: IsDeepExcluded<T> extends true ? T
|
|
84
|
+
: { [P in Keys]: DeepPickJson<Exclude<T[P], undefined>> };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { IsDeepExcluded } from './helpers.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Make all properties in T readonly deeply
|
|
5
|
+
*/
|
|
6
|
+
export type DeepReadonly<T> = _DeepReadonly<T>;
|
|
7
|
+
type _DeepReadonly<T> =
|
|
8
|
+
IsDeepExcluded<T> extends true ? T
|
|
9
|
+
: { readonly [P in keyof T]: _DeepReadonly<Exclude<T[P], undefined>> };
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Make all properties in T readonly deeply
|
|
13
|
+
*/
|
|
14
|
+
export type HighDeepReadonly<T> = _HighDeepReadonly<T>;
|
|
15
|
+
type _HighDeepReadonly<T> =
|
|
16
|
+
T extends (infer U)[] ? _HighDeepReadonly<U>[]
|
|
17
|
+
: IsDeepExcluded<T> extends true ? T
|
|
18
|
+
: { readonly [P in keyof T]: _HighDeepReadonly<Exclude<T[P], undefined>> };
|
|
19
|
+
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { IsDeepExcluded } from './helpers.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Make all properties in T required deeply
|
|
5
|
+
*/
|
|
6
|
+
export type DeepRequired<T> = _DeepRequired<T>;
|
|
7
|
+
type _DeepRequired<T> =
|
|
8
|
+
IsDeepExcluded<T> extends true ? T
|
|
9
|
+
: { [P in keyof T]-?: _DeepRequired<Exclude<T[P], undefined>> };
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Make all properties in T required deeply including arrays
|
|
14
|
+
*/
|
|
15
|
+
export type HighDeepRequired<T> = _HighDeepRequired<T>;
|
|
16
|
+
type _HighDeepRequired<T> =
|
|
17
|
+
T extends (infer U)[] ? _HighDeepRequired<U>[]
|
|
18
|
+
: IsDeepExcluded<T> extends true ? T
|
|
19
|
+
: { [P in keyof T]-?: _HighDeepRequired<Exclude<T[P], undefined>> };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { IsDeepExcluded } from './helpers.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Make all properties in T writable deeply
|
|
5
|
+
*/
|
|
6
|
+
export type DeepWritable<T> = _DeepWritable<T>;
|
|
7
|
+
type _DeepWritable<T> =
|
|
8
|
+
IsDeepExcluded<T> extends true ? T
|
|
9
|
+
: { -readonly [P in keyof T]: _DeepWritable<Exclude<T[P], undefined>> };
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Make all properties in T writable deeply including arrays
|
|
14
|
+
*/
|
|
15
|
+
export type HighDeepWritable<T> = _HighDeepWritable<T>;
|
|
16
|
+
type _HighDeepWritable<T> =
|
|
17
|
+
T extends (infer U)[] ? _HighDeepWritable<U>[]
|
|
18
|
+
: IsDeepExcluded<T> extends true ? T
|
|
19
|
+
: { -readonly [P in keyof T]: _HighDeepWritable<Exclude<T[P], undefined>> };
|
package/lib/helpers.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Builtin } from './common.js';
|
|
2
|
+
import { IfClass, IfTuple } from './type-check.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Returns true if T is excluded from deep operations
|
|
6
|
+
*/
|
|
7
|
+
export type IsDeepExcluded<T> = _IsHighDeepObject<T>;
|
|
8
|
+
type _IsHighDeepObject<T> =
|
|
9
|
+
T extends Builtin ? true
|
|
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;
|
package/lib/index.d.ts
CHANGED
|
@@ -2,8 +2,13 @@ export * from "./common";
|
|
|
2
2
|
export * from "./keys";
|
|
3
3
|
export * from "./type-check";
|
|
4
4
|
export * from "./modify";
|
|
5
|
-
export * from "./deep-
|
|
5
|
+
export * from "./deep-buildable";
|
|
6
|
+
export * from "./deep-nullish";
|
|
6
7
|
export * from "./deep-omit";
|
|
7
|
-
export * from "./deep-
|
|
8
|
+
export * from "./deep-partial";
|
|
9
|
+
export * from "./deep-pick";
|
|
10
|
+
export * from "./deep-readonly";
|
|
11
|
+
export * from "./deep-required";
|
|
12
|
+
export * from "./deep-writable";
|
|
8
13
|
export * from "./pick";
|
|
9
14
|
export * from "./omit";
|
package/lib/modify.d.ts
CHANGED
|
@@ -29,3 +29,8 @@ export type ReadonlySome<T, K extends keyof T> = Readonly<Pick<T, K>> & Omit<T,
|
|
|
29
29
|
* Marks given keys as writable
|
|
30
30
|
*/
|
|
31
31
|
export type WritableSome<T, K extends keyof T> = Writable<Pick<T, K>> & Omit<T, K>;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Merges two types without merging types of elements.
|
|
35
|
+
*/
|
|
36
|
+
export type Combine<A, B> = A & Exclude<B, keyof A>;
|
package/package.json
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"lodash",
|
|
13
13
|
"underscore"
|
|
14
14
|
],
|
|
15
|
-
"version": "2.
|
|
15
|
+
"version": "2.6.0",
|
|
16
16
|
"types": "lib/index.d.ts",
|
|
17
17
|
"main": "lib/index.js",
|
|
18
18
|
"module": "lib/index.js",
|
|
@@ -32,10 +32,10 @@
|
|
|
32
32
|
"lib/"
|
|
33
33
|
],
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@types/jest": "^29.5.
|
|
36
|
-
"eslint": "^8.
|
|
37
|
-
"jest": "^29.
|
|
35
|
+
"@types/jest": "^29.5.4",
|
|
36
|
+
"eslint": "^8.49.0",
|
|
37
|
+
"jest": "^29.7.0",
|
|
38
38
|
"ts-jest": "^29.1.1",
|
|
39
|
-
"typescript": "^5.
|
|
39
|
+
"typescript": "^5.2.2"
|
|
40
40
|
}
|
|
41
41
|
}
|
package/lib/deep-modify.d.ts
DELETED
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import { Builtin } from './common';
|
|
2
|
-
import { IfTuple } from './type-check';
|
|
3
|
-
import { OptionalKeys } from './keys';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Partial but deeply
|
|
7
|
-
*/
|
|
8
|
-
export type DeepPartial<T> = _DeepPartial<T>;
|
|
9
|
-
type _DeepPartial<T> =
|
|
10
|
-
T extends Builtin ? T
|
|
11
|
-
: T extends Promise<infer U> ? Promise<DeepPartial<U>>
|
|
12
|
-
: T extends Map<infer K, infer V> ? Map<K, DeepPartial<V>>
|
|
13
|
-
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepPartial<V>>
|
|
14
|
-
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepPartial<V>>
|
|
15
|
-
: T extends Set<infer U> ? Set<DeepPartial<U>>
|
|
16
|
-
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepPartial<U>>
|
|
17
|
-
: T extends WeakSet<infer U> ? WeakSet<DeepPartial<U>>
|
|
18
|
-
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepPartial<T[K]> }
|
|
19
|
-
: T extends (infer U)[] ? DeepPartial<U>[]
|
|
20
|
-
: { [P in keyof T]?: DeepPartial<Exclude<T[P], undefined>> };
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Combination of Partial and Writable but deeply
|
|
24
|
-
*/
|
|
25
|
-
export type DeepBuildable<T> = _DeepBuildable<T>;
|
|
26
|
-
type _DeepBuildable<T> =
|
|
27
|
-
T extends Builtin ? T
|
|
28
|
-
: T extends Promise<infer U> ? Promise<DeepBuildable<U>>
|
|
29
|
-
: T extends Map<infer K, infer V> ? Map<K, DeepBuildable<V>>
|
|
30
|
-
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepBuildable<V>>
|
|
31
|
-
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepBuildable<V>>
|
|
32
|
-
: T extends Set<infer U> ? Set<DeepBuildable<U>>
|
|
33
|
-
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepBuildable<U>>
|
|
34
|
-
: T extends WeakSet<infer U> ? WeakSet<DeepBuildable<U>>
|
|
35
|
-
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepBuildable<T[K]> }
|
|
36
|
-
: T extends (infer U)[] ? DeepBuildable<U>[]
|
|
37
|
-
: { -readonly [P in keyof T]?: DeepBuildable<Exclude<T[P], undefined>> };
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Make all properties in T required deeply
|
|
41
|
-
*/
|
|
42
|
-
export type DeepRequired<T> = _DeepRequired<T>;
|
|
43
|
-
type _DeepRequired<T> =
|
|
44
|
-
T extends Builtin ? T
|
|
45
|
-
: T extends Promise<infer U> ? Promise<DeepRequired<U>>
|
|
46
|
-
: T extends Map<infer K, infer V> ? Map<K, DeepRequired<V>>
|
|
47
|
-
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepRequired<V>>
|
|
48
|
-
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepRequired<V>>
|
|
49
|
-
: T extends Set<infer U> ? Set<DeepRequired<U>>
|
|
50
|
-
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepRequired<U>>
|
|
51
|
-
: T extends WeakSet<infer U> ? WeakSet<DeepRequired<U>>
|
|
52
|
-
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepRequired<T[K]> }
|
|
53
|
-
: T extends (infer U)[] ? DeepRequired<U>[]
|
|
54
|
-
: { [P in keyof T]-?: DeepRequired<Exclude<T[P], undefined>> };
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Make all properties in T readonly deeply
|
|
59
|
-
*/
|
|
60
|
-
export type DeepReadonly<T> = _DeepReadonly<T>;
|
|
61
|
-
type _DeepReadonly<T> =
|
|
62
|
-
T extends Builtin ? T
|
|
63
|
-
: T extends Promise<infer U> ? Promise<DeepReadonly<U>>
|
|
64
|
-
: T extends Map<infer K, infer V> ? Map<K, DeepReadonly<V>>
|
|
65
|
-
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepReadonly<V>>
|
|
66
|
-
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepReadonly<V>>
|
|
67
|
-
: T extends Set<infer U> ? Set<DeepReadonly<U>>
|
|
68
|
-
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepReadonly<U>>
|
|
69
|
-
: T extends WeakSet<infer U> ? WeakSet<DeepReadonly<U>>
|
|
70
|
-
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepReadonly<T[K]> }
|
|
71
|
-
: T extends (infer U)[] ? DeepReadonly<U>[]
|
|
72
|
-
: { readonly [P in keyof T]: DeepReadonly<Exclude<T[P], undefined>> };
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Make all properties in T writable deeply
|
|
76
|
-
*/
|
|
77
|
-
export type DeepWritable<T> = _DeepWritable<T>;
|
|
78
|
-
type _DeepWritable<T> =
|
|
79
|
-
T extends Builtin ? T
|
|
80
|
-
: T extends Promise<infer U> ? Promise<DeepWritable<U>>
|
|
81
|
-
: T extends Map<infer K, infer V> ? Map<K, DeepWritable<V>>
|
|
82
|
-
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepWritable<V>>
|
|
83
|
-
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepWritable<V>>
|
|
84
|
-
: T extends Set<infer U> ? Set<DeepWritable<U>>
|
|
85
|
-
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepWritable<U>>
|
|
86
|
-
: T extends WeakSet<infer U> ? WeakSet<DeepWritable<U>>
|
|
87
|
-
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepWritable<T[K]> }
|
|
88
|
-
: T extends (infer U)[] ? DeepWritable<U>[]
|
|
89
|
-
: { -readonly [P in keyof T]: DeepWritable<Exclude<T[P], undefined>> };
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Make all properties in T nullable deeply
|
|
93
|
-
*/
|
|
94
|
-
export type DeepNullish<T> = _DeepNullish<DeepRequired<T>>;
|
|
95
|
-
type _DeepNullish<T> =
|
|
96
|
-
T extends Builtin ? T | null | undefined
|
|
97
|
-
: T extends Promise<infer U> ? Promise<DeepNullish<U>>
|
|
98
|
-
: T extends Map<infer K, infer V> ? Map<K, DeepNullish<V>>
|
|
99
|
-
: T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<K, DeepNullish<V>>
|
|
100
|
-
: T extends WeakMap<infer K, infer V> ? WeakMap<K, DeepNullish<V>>
|
|
101
|
-
: T extends Set<infer U> ? Set<DeepNullish<U>>
|
|
102
|
-
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepNullish<U>>
|
|
103
|
-
: T extends WeakSet<infer U> ? WeakSet<DeepNullish<U>>
|
|
104
|
-
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepNullish<T[K]> }
|
|
105
|
-
: T extends (infer U)[] ? DeepNullish<U>[] | null | undefined
|
|
106
|
-
: { [P in keyof T]: DeepNullish<Exclude<T[P], undefined>> | null | undefined };
|