ts-gems 1.0.0 → 1.1.2
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 +1 -1
- package/lib/deep-modify.d.ts +8 -8
- package/lib/deep-omit.d.ts +6 -6
- package/lib/deep-pick.d.ts +6 -6
- package/lib/index.d.ts +3 -0
- package/lib/keys.ts +27 -16
- package/lib/omit.d.ts +27 -0
- package/lib/pick.d.ts +27 -0
- package/lib/type-check.d.ts +9 -11
- package/package.json +5 -4
package/lib/common.d.ts
CHANGED
|
@@ -23,7 +23,7 @@ type JsonType = BasicPrimitive | null | object | (BasicPrimitive | object)[]
|
|
|
23
23
|
* Builtin
|
|
24
24
|
* @desc Type representing Builtin types in JavaScript
|
|
25
25
|
*/
|
|
26
|
-
export type Builtin = Primitive | Function | String | Number | Date | Error | RegExp |
|
|
26
|
+
export type Builtin = Primitive | Function | String | Number | Date | Error | RegExp |
|
|
27
27
|
ArrayBuffer | DataView | Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array |
|
|
28
28
|
Int32Array | Uint32Array | Float32Array | Float64Array;
|
|
29
29
|
|
package/lib/deep-modify.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ type _DeepPartial<T> =
|
|
|
17
17
|
: T extends WeakSet<infer U> ? WeakSet<DeepPartial<U>>
|
|
18
18
|
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepPartial<T[K]> }
|
|
19
19
|
: T extends (infer U)[] ? DeepPartial<U>[]
|
|
20
|
-
: { [P in keyof T]?: DeepPartial<T[P]
|
|
20
|
+
: { [P in keyof T]?: DeepPartial<Exclude<T[P], undefined>> };
|
|
21
21
|
|
|
22
22
|
/**
|
|
23
23
|
* Combination of Partial and Writable but deeply
|
|
@@ -34,7 +34,7 @@ type _DeepBuildable<T> =
|
|
|
34
34
|
: T extends WeakSet<infer U> ? WeakSet<DeepBuildable<U>>
|
|
35
35
|
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepBuildable<T[K]> }
|
|
36
36
|
: T extends (infer U)[] ? DeepBuildable<U>[]
|
|
37
|
-
: { -readonly [P in keyof T]?: DeepBuildable<T[P]
|
|
37
|
+
: { -readonly [P in keyof T]?: DeepBuildable<Exclude<T[P], undefined>> };
|
|
38
38
|
|
|
39
39
|
/**
|
|
40
40
|
* Make all properties in T required deeply
|
|
@@ -51,7 +51,7 @@ type _DeepRequired<T> =
|
|
|
51
51
|
: T extends WeakSet<infer U> ? WeakSet<DeepRequired<U>>
|
|
52
52
|
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepRequired<T[K]> }
|
|
53
53
|
: T extends (infer U)[] ? DeepRequired<U>[]
|
|
54
|
-
: { [P in keyof T]-?: DeepRequired<T[P]
|
|
54
|
+
: { [P in keyof T]-?: DeepRequired<Exclude<T[P], undefined>> };
|
|
55
55
|
|
|
56
56
|
|
|
57
57
|
/**
|
|
@@ -69,7 +69,7 @@ type _DeepReadonly<T> =
|
|
|
69
69
|
: T extends WeakSet<infer U> ? WeakSet<DeepReadonly<U>>
|
|
70
70
|
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepReadonly<T[K]> }
|
|
71
71
|
: T extends (infer U)[] ? DeepReadonly<U>[]
|
|
72
|
-
: { readonly [P in keyof T]: DeepReadonly<T[P]
|
|
72
|
+
: { readonly [P in keyof T]: DeepReadonly<Exclude<T[P], undefined>> };
|
|
73
73
|
|
|
74
74
|
/**
|
|
75
75
|
* Make all properties in T writable deeply
|
|
@@ -86,12 +86,12 @@ type _DeepWritable<T> =
|
|
|
86
86
|
: T extends WeakSet<infer U> ? WeakSet<DeepWritable<U>>
|
|
87
87
|
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepWritable<T[K]> }
|
|
88
88
|
: T extends (infer U)[] ? DeepWritable<U>[]
|
|
89
|
-
: { -readonly [P in keyof T]: DeepWritable<T[P]
|
|
89
|
+
: { -readonly [P in keyof T]: DeepWritable<Exclude<T[P], undefined>> };
|
|
90
90
|
|
|
91
91
|
/**
|
|
92
92
|
* Make all properties in T nullable deeply
|
|
93
93
|
*/
|
|
94
|
-
export type DeepNullish<T> = _DeepNullish<T
|
|
94
|
+
export type DeepNullish<T> = _DeepNullish<DeepRequired<T>>;
|
|
95
95
|
type _DeepNullish<T> =
|
|
96
96
|
T extends Builtin ? T | null | undefined
|
|
97
97
|
: T extends Promise<infer U> ? Promise<DeepNullish<U>>
|
|
@@ -102,5 +102,5 @@ type _DeepNullish<T> =
|
|
|
102
102
|
: T extends ReadonlySet<infer U> ? ReadonlySet<DeepNullish<U>>
|
|
103
103
|
: T extends WeakSet<infer U> ? WeakSet<DeepNullish<U>>
|
|
104
104
|
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepNullish<T[K]> }
|
|
105
|
-
: T extends (infer U)[] ? DeepNullish<U>[]
|
|
106
|
-
: { [P in keyof T]
|
|
105
|
+
: T extends (infer U)[] ? DeepNullish<U>[] | null | undefined
|
|
106
|
+
: { [P in keyof T]: DeepNullish<T[P]>| null | undefined };
|
package/lib/deep-omit.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ type _DeepOmitOptional<T, K extends keyof T = Exclude<keyof T, OptionalKeys<T>>>
|
|
|
17
17
|
: T extends WeakSet<infer U> ? WeakSet<DeepOmitOptional<U>>
|
|
18
18
|
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepOmitOptional<T[K]> }
|
|
19
19
|
: T extends (infer U)[] ? DeepOmitOptional<U>[]
|
|
20
|
-
: { [P in K]: DeepOmitOptional<T[P]
|
|
20
|
+
: { [P in K]: DeepOmitOptional<Exclude<T[P], undefined>> };
|
|
21
21
|
|
|
22
22
|
/**
|
|
23
23
|
* Omit all required properties in T deeply
|
|
@@ -34,7 +34,7 @@ type _DeepOmitRequired<T, J extends keyof T = Exclude<keyof T, RequiredKeys<T>>>
|
|
|
34
34
|
: T extends WeakSet<infer U> ? WeakSet<DeepOmitRequired<U>>
|
|
35
35
|
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepOmitRequired<T[K]> }
|
|
36
36
|
: T extends (infer U)[] ? DeepOmitRequired<U>[]
|
|
37
|
-
: { [P in J]: DeepOmitRequired<T[P]
|
|
37
|
+
: { [P in J]: DeepOmitRequired<Exclude<T[P], undefined>> };
|
|
38
38
|
|
|
39
39
|
/**
|
|
40
40
|
* Omit all readonly properties in T deeply
|
|
@@ -51,7 +51,7 @@ type _DeepOmitReadonly<T, J extends keyof T = Exclude<keyof T, ReadonlyKeys<T>>>
|
|
|
51
51
|
: T extends WeakSet<infer U> ? WeakSet<DeepOmitReadonly<U>>
|
|
52
52
|
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepOmitReadonly<T[K]> }
|
|
53
53
|
: T extends (infer U)[] ? DeepOmitReadonly<U>[]
|
|
54
|
-
: { [P in J]: DeepOmitReadonly<T[P]
|
|
54
|
+
: { [P in J]: DeepOmitReadonly<Exclude<T[P], undefined>> };
|
|
55
55
|
|
|
56
56
|
/**
|
|
57
57
|
* Omit all writable properties in T deeply
|
|
@@ -68,10 +68,10 @@ type _DeepOmitWritable<T, K extends keyof T = Exclude<keyof T, WritableKeys<T>>>
|
|
|
68
68
|
: T extends WeakSet<infer U> ? WeakSet<DeepOmitWritable<U>>
|
|
69
69
|
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepOmitWritable<T[K]> }
|
|
70
70
|
: T extends (infer U)[] ? DeepOmitWritable<U>[]
|
|
71
|
-
: { [P in K]: DeepOmitWritable<T[P]
|
|
71
|
+
: { [P in K]: DeepOmitWritable<Exclude<T[P], undefined>> }
|
|
72
72
|
|
|
73
73
|
/**
|
|
74
|
-
* Omit all JSON properties in T deeply
|
|
74
|
+
* Omit all JSON friendly properties in T deeply
|
|
75
75
|
*/
|
|
76
76
|
export type DeepOmitJson<T> = _DeepOmitJson<T>
|
|
77
77
|
type _DeepOmitJson<T, K extends keyof T = Exclude<keyof T, JsonKeys<T>>> =
|
|
@@ -85,4 +85,4 @@ type _DeepOmitJson<T, K extends keyof T = Exclude<keyof T, JsonKeys<T>>> =
|
|
|
85
85
|
: T extends WeakSet<infer U> ? WeakSet<DeepOmitJson<U>>
|
|
86
86
|
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepOmitJson<T[K]> }
|
|
87
87
|
: T extends (infer U)[] ? DeepOmitJson<U>[]
|
|
88
|
-
: { [P in K]: DeepOmitJson<T[P]
|
|
88
|
+
: { [P in K]: DeepOmitJson<Exclude<T[P], undefined>> };
|
package/lib/deep-pick.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ type _DeepPickOptional<T, K extends keyof T = OptionalKeys<T>> =
|
|
|
17
17
|
: T extends WeakSet<infer U> ? WeakSet<DeepPickOptional<U>>
|
|
18
18
|
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepPickOptional<T[K]> }
|
|
19
19
|
: T extends (infer U)[] ? DeepPickOptional<U>[]
|
|
20
|
-
: { [P in K]: DeepPickOptional<T[P]
|
|
20
|
+
: { [P in K]: DeepPickOptional<Exclude<T[P], undefined>> };
|
|
21
21
|
|
|
22
22
|
/**
|
|
23
23
|
* Pick all required properties in T deeply
|
|
@@ -34,7 +34,7 @@ type _DeepPickRequired<T, J extends keyof T = RequiredKeys<T>> =
|
|
|
34
34
|
: T extends WeakSet<infer U> ? WeakSet<DeepPickRequired<U>>
|
|
35
35
|
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepPickRequired<T[K]> }
|
|
36
36
|
: T extends (infer U)[] ? DeepPickRequired<U>[]
|
|
37
|
-
: { [P in J]: DeepPickRequired<T[P]
|
|
37
|
+
: { [P in J]: DeepPickRequired<Exclude<T[P], undefined>> };
|
|
38
38
|
|
|
39
39
|
/**
|
|
40
40
|
* Pick all readonly properties in T deeply
|
|
@@ -51,7 +51,7 @@ type _DeepPickReadonly<T, J extends keyof T = ReadonlyKeys<T>> =
|
|
|
51
51
|
: T extends WeakSet<infer U> ? WeakSet<DeepPickReadonly<U>>
|
|
52
52
|
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepPickReadonly<T[K]> }
|
|
53
53
|
: T extends (infer U)[] ? DeepPickReadonly<U>[]
|
|
54
|
-
: { [P in J]: DeepPickReadonly<T[P]
|
|
54
|
+
: { [P in J]: DeepPickReadonly<Exclude<T[P], undefined>> };
|
|
55
55
|
|
|
56
56
|
/**
|
|
57
57
|
* Pick all writable properties in T deeply
|
|
@@ -68,10 +68,10 @@ type _DeepPickWritable<T, K extends keyof T = WritableKeys<T>> =
|
|
|
68
68
|
: T extends WeakSet<infer U> ? WeakSet<DeepPickWritable<U>>
|
|
69
69
|
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepPickWritable<T[K]> }
|
|
70
70
|
: T extends (infer U)[] ? DeepPickWritable<U>[]
|
|
71
|
-
: { [P in K]: DeepPickWritable<T[P]
|
|
71
|
+
: { [P in K]: DeepPickWritable<Exclude<T[P], undefined>> }
|
|
72
72
|
|
|
73
73
|
/**
|
|
74
|
-
* Pick all JSON properties in T deeply
|
|
74
|
+
* Pick all JSON friendly properties in T deeply
|
|
75
75
|
*/
|
|
76
76
|
export type DeepPickJson<T> = _DeepPickJson<T>
|
|
77
77
|
type _DeepPickJson<T, K extends keyof T = JsonKeys<T>> =
|
|
@@ -85,4 +85,4 @@ type _DeepPickJson<T, K extends keyof T = JsonKeys<T>> =
|
|
|
85
85
|
: T extends WeakSet<infer U> ? WeakSet<DeepPickJson<U>>
|
|
86
86
|
: IfTuple<T> extends true ? { [K in OptionalKeys<T>]?: DeepPickJson<T[K]> }
|
|
87
87
|
: T extends (infer U)[] ? DeepPickJson<U>[]
|
|
88
|
-
: { [P in K]: DeepPickJson<T[P]
|
|
88
|
+
: { [P in K]: DeepPickJson<Exclude<T[P], undefined>> };
|
package/lib/index.d.ts
CHANGED
package/lib/keys.ts
CHANGED
|
@@ -12,27 +12,33 @@ export type KeysOf<T> = keyof T;
|
|
|
12
12
|
*/
|
|
13
13
|
export type ValuesOf<T> = T[keyof T];
|
|
14
14
|
|
|
15
|
+
/**
|
|
16
|
+
* RequiredKeys
|
|
17
|
+
* @desc Returns required keys of an object
|
|
18
|
+
*/
|
|
19
|
+
export type RequiredKeys<T> = {
|
|
20
|
+
[K in keyof T]-?: IfUndefined<T[K]> extends true
|
|
21
|
+
? never
|
|
22
|
+
: T extends { [K1 in K]: any } ? K : never
|
|
23
|
+
}[keyof T];
|
|
15
24
|
|
|
16
25
|
/**
|
|
17
26
|
* OptionalKeys
|
|
18
27
|
* @desc Returns optional keys of an object
|
|
19
28
|
*/
|
|
20
|
-
export type OptionalKeys<T> =
|
|
21
|
-
[K in keyof T]-?:
|
|
22
|
-
|
|
29
|
+
export type OptionalKeys<T> = {
|
|
30
|
+
[K in keyof T]-?: IfUndefined<T[K]> extends true
|
|
31
|
+
? never
|
|
32
|
+
: T extends { [K1 in K]: any } ? never : K
|
|
33
|
+
}[keyof T];
|
|
23
34
|
|
|
24
|
-
/**
|
|
25
|
-
* RequiredKeys
|
|
26
|
-
* @desc Returns required keys of an object
|
|
27
|
-
*/
|
|
28
|
-
export type RequiredKeys<T> = Exclude<keyof T, OptionalKeys<T>>;
|
|
29
35
|
|
|
30
36
|
/**
|
|
31
37
|
* @desc Returns readonly keys of an object
|
|
32
38
|
*/
|
|
33
|
-
export type ReadonlyKeys<T> =
|
|
39
|
+
export type ReadonlyKeys<T> = {
|
|
34
40
|
[K in keyof T]-?: IfEquals<{ [Q in K]: T[K] }, { -readonly [Q in K]: T[K] }, never, K>
|
|
35
|
-
}
|
|
41
|
+
}[keyof T];
|
|
36
42
|
|
|
37
43
|
/**
|
|
38
44
|
* @desc Returns non function keys of an object
|
|
@@ -41,13 +47,18 @@ export type NonFunctionKeys<T> = Exclude<keyof T, FunctionKeys<T>>;
|
|
|
41
47
|
|
|
42
48
|
|
|
43
49
|
/**
|
|
44
|
-
* @desc Returns
|
|
50
|
+
* @desc Returns JSON friendly keys of an object
|
|
45
51
|
*/
|
|
46
|
-
export type JsonKeys<T> =
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
52
|
+
export type JsonKeys<T> = _JsonKeys<T>;
|
|
53
|
+
type _JsonKeys<T, J = Required<T>> = ValuesOf<{
|
|
54
|
+
[K in keyof J]: IfUndefined<J[K]> extends true
|
|
55
|
+
? never
|
|
56
|
+
: K extends symbol
|
|
57
|
+
? never
|
|
58
|
+
: IfJson<J[K]> extends true
|
|
59
|
+
? K
|
|
60
|
+
: never
|
|
61
|
+
|
|
51
62
|
}>;
|
|
52
63
|
|
|
53
64
|
/**
|
package/lib/omit.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import {JsonKeys, OptionalKeys, ReadonlyKeys, RequiredKeys, WritableKeys} from './keys';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Omit all optional properties in T
|
|
5
|
+
*/
|
|
6
|
+
export type OmitOptional<T> = Omit<T, OptionalKeys<T>>;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Omit all required properties in T
|
|
10
|
+
*/
|
|
11
|
+
export type OmitRequired<T> = Omit<T, RequiredKeys<T>>;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Omit all readonly properties in T
|
|
15
|
+
*/
|
|
16
|
+
export type OmitReadonly<T> = Omit<T, ReadonlyKeys<T>>;
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Omit all writable properties in T
|
|
21
|
+
*/
|
|
22
|
+
export type OmitWritable<T> = Omit<T, WritableKeys<T>>;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Omit all JSON friendly properties in T
|
|
26
|
+
*/
|
|
27
|
+
export type OmitJson<T> = Omit<T, JsonKeys<T>>;
|
package/lib/pick.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import {JsonKeys, OptionalKeys, ReadonlyKeys, RequiredKeys, WritableKeys} from './keys';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Pick all optional properties in T
|
|
5
|
+
*/
|
|
6
|
+
export type PickOptional<T> = Pick<T, OptionalKeys<T>>;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Pick all required properties in T
|
|
10
|
+
*/
|
|
11
|
+
export type PickRequired<T> = Pick<T, RequiredKeys<T>>;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Pick all readonly properties in T
|
|
15
|
+
*/
|
|
16
|
+
export type PickReadonly<T> = Pick<T, ReadonlyKeys<T>>;
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Pick all writable properties in T
|
|
21
|
+
*/
|
|
22
|
+
export type PickWritable<T> = Pick<T, WritableKeys<T>>;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Pick all JSON friendly properties (no symbols) in T
|
|
26
|
+
*/
|
|
27
|
+
export type PickJson<T> = Pick<T, JsonKeys<T>>;
|
package/lib/type-check.d.ts
CHANGED
|
@@ -69,17 +69,15 @@ export type IfPrimitiveOrAny<T, Y = true, N = false> =
|
|
|
69
69
|
* Returns Y if typeof T is JSON like, N otherwise
|
|
70
70
|
*/
|
|
71
71
|
export type IfJson<T, Y = true, N = false> =
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
T extends (infer U)[] ? IfJson<U> extends true ? Y : N
|
|
82
|
-
: N;
|
|
72
|
+
IfNull<T> extends true ? Y :
|
|
73
|
+
IfNever<T> extends true ? N :
|
|
74
|
+
IfUnknown<T> extends true ? N :
|
|
75
|
+
IfClass<T> extends true ? N :
|
|
76
|
+
IfFunction<T> extends true ? N :
|
|
77
|
+
IfUndefined<T> extends true ? N :
|
|
78
|
+
T extends symbol ? N :
|
|
79
|
+
T extends (infer U)[] ? IfJson<U> extends true ? Y : N
|
|
80
|
+
: Y;
|
|
83
81
|
|
|
84
82
|
export type IfJsonOrAny<T, Y = true, N = false> =
|
|
85
83
|
IfAny<T> extends true ? Y : IfJson<T, Y, N>;
|
package/package.json
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"lodash",
|
|
13
13
|
"underscore"
|
|
14
14
|
],
|
|
15
|
-
"version": "1.
|
|
15
|
+
"version": "1.1.2",
|
|
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>",
|
|
@@ -32,9 +32,10 @@
|
|
|
32
32
|
"typescript": ">=4.0.0"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@types/jest": "^27.0
|
|
35
|
+
"@types/jest": "^27.4.0",
|
|
36
|
+
"jest": "^27.4.7",
|
|
36
37
|
"prettier": "^2.5.1",
|
|
37
|
-
"ts-jest": "^27.1.
|
|
38
|
-
"typescript": "^4.5.
|
|
38
|
+
"ts-jest": "^27.1.3",
|
|
39
|
+
"typescript": "^4.5.5"
|
|
39
40
|
}
|
|
40
41
|
}
|