ts-gems 1.5.2 → 2.2.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/common.d.ts +17 -2
- package/lib/deep-pick.d.ts +130 -71
- package/lib/modify.d.ts +21 -1
- package/lib/omit.d.ts +2 -0
- package/lib/type-check.d.ts +10 -3
- package/package.json +6 -6
package/lib/common.d.ts
CHANGED
|
@@ -68,11 +68,11 @@ export type ElementType<T extends { [P in K & any]: any },
|
|
|
68
68
|
|
|
69
69
|
|
|
70
70
|
/**
|
|
71
|
-
*
|
|
71
|
+
* Type
|
|
72
72
|
* @desc Represents constructor of type T
|
|
73
73
|
*/
|
|
74
74
|
export interface Type<T = any> {
|
|
75
|
-
|
|
75
|
+
new(...args: any[]): T;
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
/**
|
|
@@ -81,3 +81,18 @@ export interface Type<T = any> {
|
|
|
81
81
|
*/
|
|
82
82
|
export type Class<Args extends any[] = any[], Instance = {}, Static = {}> =
|
|
83
83
|
(new(...args: Args) => Instance) & Static;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* NoUnion
|
|
87
|
+
* @desc Returns "never" if the type is union
|
|
88
|
+
*/
|
|
89
|
+
type NoUnion<T, U = T> = T extends U ? [U] extends [T] ? T : never : never;
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Opaque
|
|
94
|
+
* @desc Create unique type that can't be assigned to base type by accident.
|
|
95
|
+
*/
|
|
96
|
+
type Opaque<T, N extends string> = T & {
|
|
97
|
+
__type: N;
|
|
98
|
+
}
|
package/lib/deep-pick.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {Builtin
|
|
1
|
+
import {Builtin} from './common';
|
|
2
2
|
import {IfClass, IfTuple} from './type-check';
|
|
3
3
|
import {JsonKeys, OptionalKeys, ReadonlyKeys, RequiredKeys, WritableKeys} from './keys';
|
|
4
4
|
|
|
@@ -8,100 +8,159 @@ import {JsonKeys, OptionalKeys, ReadonlyKeys, RequiredKeys, WritableKeys} from '
|
|
|
8
8
|
export type DeepPickOptional<T> = _DeepPickOptional<T>;
|
|
9
9
|
type _DeepPickOptional<T, K extends keyof T = OptionalKeys<T>> =
|
|
10
10
|
T extends Builtin ? T
|
|
11
|
-
: T extends
|
|
12
|
-
: T extends
|
|
13
|
-
: T extends
|
|
14
|
-
: T extends
|
|
15
|
-
: T extends
|
|
16
|
-
: T extends
|
|
17
|
-
: T extends
|
|
18
|
-
:
|
|
19
|
-
: T extends
|
|
20
|
-
:
|
|
11
|
+
: IfTuple<T> extends true ? T
|
|
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>> };
|
|
21
22
|
|
|
22
23
|
/**
|
|
23
|
-
* Pick all
|
|
24
|
+
* Pick all optional properties in T deeply
|
|
25
|
+
*/
|
|
26
|
+
export type StrictDeepPickOptional<T> = _StrictDeepPickOptional<T>;
|
|
27
|
+
type _StrictDeepPickOptional<T, K extends keyof T = OptionalKeys<T>> =
|
|
28
|
+
T extends Builtin ? T
|
|
29
|
+
: IfTuple<T> extends true ? T
|
|
30
|
+
: IfClass<T> extends true ? T
|
|
31
|
+
: T extends Promise<infer U> ? Promise<StrictDeepPickOptional<U>>
|
|
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>> };
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Pick all required properties in T deeply even in Maps, Sets etc
|
|
24
43
|
*/
|
|
25
44
|
export type DeepPickRequired<T> = _DeepPickRequired<T>;
|
|
26
45
|
type _DeepPickRequired<T, J extends keyof T = RequiredKeys<T>> =
|
|
27
46
|
T extends Builtin ? T
|
|
28
|
-
: T extends
|
|
29
|
-
: T extends
|
|
30
|
-
: T extends
|
|
31
|
-
: T extends
|
|
32
|
-
: T extends
|
|
33
|
-
: T extends
|
|
34
|
-
: T extends
|
|
35
|
-
:
|
|
36
|
-
: T extends
|
|
37
|
-
:
|
|
47
|
+
: IfTuple<T> extends true ? T
|
|
48
|
+
: IfClass<T> extends true ? T
|
|
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>> };
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Pick all required properties in T deeply even in Maps, Sets etc
|
|
61
|
+
*/
|
|
62
|
+
export type StrictDeepPickRequired<T> = _StrictDeepPickRequired<T>;
|
|
63
|
+
type _StrictDeepPickRequired<T, J extends keyof T = RequiredKeys<T>> =
|
|
64
|
+
T extends Builtin ? T
|
|
65
|
+
: IfTuple<T> extends true ? T
|
|
66
|
+
: IfClass<T> extends true ? T
|
|
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>> };
|
|
76
|
+
|
|
38
77
|
|
|
39
78
|
/**
|
|
40
79
|
* Pick all readonly properties in T deeply
|
|
41
80
|
*/
|
|
42
81
|
export type DeepPickReadonly<T> = _DeepPickReadonly<T>;
|
|
43
|
-
type _DeepPickReadonly<T,
|
|
82
|
+
type _DeepPickReadonly<T, K extends keyof T = ReadonlyKeys<T>> =
|
|
44
83
|
T extends Builtin ? T
|
|
45
|
-
: T extends
|
|
46
|
-
: T extends
|
|
47
|
-
: T extends
|
|
48
|
-
: T extends
|
|
49
|
-
: T extends
|
|
50
|
-
: T extends
|
|
51
|
-
: T extends
|
|
52
|
-
:
|
|
53
|
-
: T extends
|
|
54
|
-
:
|
|
84
|
+
: IfTuple<T> extends true ? T
|
|
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>> };
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Pick all readonly properties in T deeply even in Maps, Sets etc
|
|
98
|
+
*/
|
|
99
|
+
export type StrictDeepPickReadonly<T> = _StrictDeepPickReadonly<T>;
|
|
100
|
+
type _StrictDeepPickReadonly<T, J extends keyof T = ReadonlyKeys<T>> =
|
|
101
|
+
T extends Builtin ? T
|
|
102
|
+
// : IfTuple<T> extends true ? T
|
|
103
|
+
// : IfClass<T> extends true ? T
|
|
104
|
+
: T extends Promise<infer U> ? Promise<StrictDeepPickReadonly<U>>
|
|
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>> };
|
|
55
113
|
|
|
56
114
|
/**
|
|
57
115
|
* Pick all writable properties in T deeply
|
|
58
116
|
*/
|
|
59
|
-
export type DeepPickWritable<T> = _DeepPickWritable<T
|
|
117
|
+
export type DeepPickWritable<T> = _DeepPickWritable<T>;
|
|
60
118
|
type _DeepPickWritable<T, K extends keyof T = WritableKeys<T>> =
|
|
61
119
|
T extends Builtin ? T
|
|
62
|
-
: T extends
|
|
63
|
-
: T extends
|
|
64
|
-
: T extends
|
|
65
|
-
: T extends
|
|
66
|
-
: T extends
|
|
67
|
-
: T extends
|
|
68
|
-
: T extends
|
|
69
|
-
:
|
|
70
|
-
:
|
|
71
|
-
: T extends
|
|
72
|
-
: { [P in K]: DeepPickWritable<Exclude<T[P], undefined>> }
|
|
120
|
+
: IfTuple<T> extends true ? T
|
|
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>> };
|
|
73
131
|
|
|
74
132
|
/**
|
|
75
|
-
* Pick all
|
|
133
|
+
* Pick all writable properties in T deeply even in Maps, Sets etc
|
|
76
134
|
*/
|
|
77
|
-
export type
|
|
78
|
-
type
|
|
135
|
+
export type StrictDeepPickWritable<T> = _StrictDeepPickWritable<T>
|
|
136
|
+
type _StrictDeepPickWritable<T, K extends keyof T = WritableKeys<T>> =
|
|
79
137
|
T extends Builtin ? T
|
|
80
|
-
: T extends
|
|
81
|
-
: T extends
|
|
82
|
-
: T extends
|
|
83
|
-
: T extends
|
|
84
|
-
: T extends
|
|
85
|
-
: T extends
|
|
86
|
-
: T extends
|
|
87
|
-
:
|
|
88
|
-
: T extends
|
|
89
|
-
:
|
|
90
|
-
|
|
138
|
+
: IfTuple<T> extends true ? T
|
|
139
|
+
: IfClass<T> extends true ? T
|
|
140
|
+
: T extends Promise<infer U> ? Promise<StrictDeepPickWritable<U>>
|
|
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>> }
|
|
91
149
|
|
|
92
150
|
/**
|
|
93
151
|
* Pick all JSON friendly properties in T deeply
|
|
94
152
|
*/
|
|
95
|
-
export type
|
|
96
|
-
type
|
|
153
|
+
export type DeepPickJson<T> = _DeepPickJson<T>
|
|
154
|
+
type _DeepPickJson<T, Keys extends keyof T = JsonKeys<T>> =
|
|
97
155
|
T extends Builtin ? T
|
|
98
|
-
: T extends
|
|
99
|
-
: T extends
|
|
100
|
-
: T extends
|
|
101
|
-
: T extends
|
|
102
|
-
: T extends
|
|
103
|
-
: T extends
|
|
104
|
-
: T extends
|
|
105
|
-
:
|
|
106
|
-
: T extends
|
|
107
|
-
:
|
|
156
|
+
: IfTuple<T> extends true ? T
|
|
157
|
+
: IfClass<T> extends true ? T
|
|
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>> };
|
package/lib/modify.d.ts
CHANGED
|
@@ -2,10 +2,30 @@
|
|
|
2
2
|
* Make all properties in T writable
|
|
3
3
|
*/
|
|
4
4
|
export type Writable<T> = {
|
|
5
|
-
|
|
5
|
+
-readonly [P in keyof T]: T[P];
|
|
6
6
|
};
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Combination of Partial and Writable
|
|
10
10
|
*/
|
|
11
11
|
export type Buildable<T> = Partial<Writable<T>>;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Marks given keys as optional
|
|
15
|
+
*/
|
|
16
|
+
export type PartialSome<T, K extends keyof T> = Partial<Pick<T, K>> & Omit<T, K>;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Marks given keys as required
|
|
20
|
+
*/
|
|
21
|
+
export type RequiredSome<T, K extends keyof T> = Required<Pick<T, K>> & Omit<T, K>;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Marks given keys as readonly
|
|
25
|
+
*/
|
|
26
|
+
export type ReadonlySome<T, K extends keyof T> = Readonly<Pick<T, K>> & Omit<T, K>;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Marks given keys as writable
|
|
30
|
+
*/
|
|
31
|
+
export type WritableSome<T, K extends keyof T> = Writable<Pick<T, K>> & Omit<T, K>;
|
package/lib/omit.d.ts
CHANGED
package/lib/type-check.d.ts
CHANGED
|
@@ -115,7 +115,7 @@ export type IfFunctionOrAny<T, Y = true, N = false> =
|
|
|
115
115
|
IfAny<T> extends true ? Y : IfFunction<T, Y, N>;
|
|
116
116
|
|
|
117
117
|
/**
|
|
118
|
-
* Returns Y if typeof T is
|
|
118
|
+
* Returns Y if typeof T is a constructor type, N otherwise
|
|
119
119
|
*/
|
|
120
120
|
export type IfClass<T, Y = true, N = false> =
|
|
121
121
|
IfNever<T> extends true ? N
|
|
@@ -131,8 +131,15 @@ export type IfClassOrAny<T, Y = true, N = false> =
|
|
|
131
131
|
/**
|
|
132
132
|
* Returns "Y" if "T1" is exactly same with "T2", "N" otherwise
|
|
133
133
|
*/
|
|
134
|
-
type
|
|
135
|
-
|
|
134
|
+
type EqualsWrapped<T> = T extends infer R & {}
|
|
135
|
+
? {
|
|
136
|
+
[P in keyof R]: R[P]
|
|
137
|
+
}
|
|
138
|
+
: never
|
|
139
|
+
export type IfEquals<T1, T2, Y = true, N = false> =
|
|
140
|
+
IfObject<T1> | IfObject<T2> extends true
|
|
141
|
+
? ((<G>() => G extends EqualsWrapped<T1> ? 1 : 2) extends (<G>() => G extends EqualsWrapped<T2> ? 1 : 2) ? Y : N)
|
|
142
|
+
: ((<G>() => G extends T1 ? 1 : 2) extends (<G>() => G extends T2 ? 1 : 2) ? Y : N);
|
|
136
143
|
|
|
137
144
|
/**
|
|
138
145
|
* Returns "Y" if type "T" matches "U", "N" otherwise
|
package/package.json
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"lodash",
|
|
13
13
|
"underscore"
|
|
14
14
|
],
|
|
15
|
-
"version": "
|
|
15
|
+
"version": "2.2.0",
|
|
16
16
|
"types": "lib/index.d.ts",
|
|
17
17
|
"repository": "git@github.com:panates/ts-gems.git",
|
|
18
18
|
"author": "Eray Hanoglu <e.hanoglu@panates.com>",
|
|
@@ -33,10 +33,10 @@
|
|
|
33
33
|
"typescript": ">=4.0.0"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@types/jest": "^
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"ts-jest": "^
|
|
40
|
-
"typescript": "^4.
|
|
36
|
+
"@types/jest": "^28.1.4",
|
|
37
|
+
"eslint": "^8.19.0",
|
|
38
|
+
"jest": "^28.1.2",
|
|
39
|
+
"ts-jest": "^28.0.5",
|
|
40
|
+
"typescript": "^4.7.4"
|
|
41
41
|
}
|
|
42
42
|
}
|