ts-gems 2.9.2 → 3.0.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/combine.d.ts +7 -0
- package/lib/helpers.d.ts +23 -15
- package/lib/index.d.ts +13 -14
- package/lib/logical.d.ts +19 -0
- package/lib/mutable.d.ts +84 -0
- package/lib/nullish.d.ts +34 -0
- package/lib/omit-never.d.ts +49 -0
- package/lib/omit.d.ts +37 -48
- package/lib/opaque.ts +12 -0
- package/lib/partial.d.ts +78 -0
- package/lib/pick.d.ts +77 -17
- package/lib/readonly.d.ts +143 -0
- package/lib/required.d.ts +145 -0
- package/lib/type-check.d.ts +20 -38
- package/lib/{common.d.ts → types.d.ts} +14 -45
- package/package.json +1 -1
- package/lib/deep-buildable.d.ts +0 -20
- package/lib/deep-nullish.d.ts +0 -21
- package/lib/deep-omit.d.ts +0 -94
- package/lib/deep-partial.d.ts +0 -18
- package/lib/deep-pick.d.ts +0 -85
- package/lib/deep-readonly.d.ts +0 -20
- package/lib/deep-remove-nulls.d.ts +0 -20
- package/lib/deep-required.d.ts +0 -20
- package/lib/deep-writable.d.ts +0 -20
- package/lib/keys.d.ts +0 -118
- package/lib/modify.d.ts +0 -45
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { IfNoDeepValue } from './helpers';
|
|
2
|
+
import { Or } from './logical.js';
|
|
3
|
+
import { IfEquals, IfNever } from './type-check';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Marks given keys as readonly
|
|
7
|
+
*/
|
|
8
|
+
export type ReadonlySome<T, K extends keyof T> = Readonly<Pick<T, K>> & Omit<T, K>;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Make all properties in T readonly deeply
|
|
12
|
+
*/
|
|
13
|
+
export type DeepReadonly<T> = {
|
|
14
|
+
readonly [K in keyof T as (IfNever<Exclude<T[K], undefined>, never, K>)]:
|
|
15
|
+
// Do not deep process No-Deep values
|
|
16
|
+
IfNoDeepValue<Exclude<T[K], undefined>> extends true ? T[K]
|
|
17
|
+
// Deep process objects
|
|
18
|
+
: DeepReadonly<Exclude<T[K], undefined>>
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Make all properties in T readonly deeply
|
|
23
|
+
*/
|
|
24
|
+
export type DeeperReadonly<T> = {
|
|
25
|
+
readonly [K in keyof T as (IfNever<Exclude<T[K], undefined>, never, K>)]:
|
|
26
|
+
// Deep process arrays
|
|
27
|
+
Exclude<T[K], undefined> extends (infer U)[] ? DeeperReadonly<U>[]
|
|
28
|
+
// Do not deep process No-Deep values
|
|
29
|
+
: IfNoDeepValue<Exclude<T[K], undefined>> extends true ? T[K]
|
|
30
|
+
// Deep process objects
|
|
31
|
+
: DeeperReadonly<Exclude<T[K], undefined>>
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Returns readonly keys of an object
|
|
37
|
+
*/
|
|
38
|
+
export type ReadonlyKeys<T> = keyof PickReadonly<T>;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Pick all readonly properties in T
|
|
42
|
+
*/
|
|
43
|
+
export type PickReadonly<T> = {
|
|
44
|
+
[K in keyof T as (
|
|
45
|
+
Or<
|
|
46
|
+
// Omit never keys
|
|
47
|
+
IfNever<Exclude<T[K], undefined>>,
|
|
48
|
+
// Omit required
|
|
49
|
+
IfEquals<{ [Q in K]: T[K] }, { readonly [Q in K]: T[K] }, false, true>
|
|
50
|
+
> extends true ? never : K
|
|
51
|
+
)]: T[K]
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Omit all readonly properties in T
|
|
56
|
+
*/
|
|
57
|
+
export type OmitReadonly<T> = {
|
|
58
|
+
[K in keyof T as (
|
|
59
|
+
Or<
|
|
60
|
+
// Omit never keys
|
|
61
|
+
IfNever<Exclude<T[K], undefined>>,
|
|
62
|
+
// Omit required
|
|
63
|
+
IfEquals<{ [Q in K]: T[K] }, { readonly [Q in K]: T[K] }>
|
|
64
|
+
> extends true ? never : K
|
|
65
|
+
)]: T[K]
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Pick all readonly properties in T deeply
|
|
71
|
+
*/
|
|
72
|
+
export type DeepPickReadonly<T> = {
|
|
73
|
+
[K in keyof T as (
|
|
74
|
+
Or<
|
|
75
|
+
// Omit never keys
|
|
76
|
+
IfNever<Exclude<T[K], undefined>>,
|
|
77
|
+
// Omit required
|
|
78
|
+
IfEquals<{ [Q in K]: T[K] }, { readonly [Q in K]: T[K] }, false, true>
|
|
79
|
+
> extends true ? never : K
|
|
80
|
+
)]:
|
|
81
|
+
// Do not deep process No-Deep values
|
|
82
|
+
IfNoDeepValue<Exclude<T[K], undefined>> extends true ? T[K]
|
|
83
|
+
// Deep process objects
|
|
84
|
+
: DeepPickReadonly<Exclude<T[K], undefined>>
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Pick all readonly properties in T deeply
|
|
89
|
+
*/
|
|
90
|
+
export type DeepOmitReadonly<T> = {
|
|
91
|
+
[K in keyof T as (
|
|
92
|
+
Or<
|
|
93
|
+
// Omit never keys
|
|
94
|
+
IfNever<Exclude<T[K], undefined>>,
|
|
95
|
+
// Omit required
|
|
96
|
+
IfEquals<{ [Q in K]: T[K] }, { readonly [Q in K]: T[K] }>
|
|
97
|
+
> extends true ? never : K
|
|
98
|
+
)]:
|
|
99
|
+
// Do not deep process No-Deep values
|
|
100
|
+
IfNoDeepValue<Exclude<T[K], undefined>> extends true ? T[K]
|
|
101
|
+
// Deep process objects
|
|
102
|
+
: DeepOmitReadonly<Exclude<T[K], undefined>>
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Pick all readonly properties in T deeply including arrays
|
|
107
|
+
*/
|
|
108
|
+
export type DeeperPickReadonly<T> = {
|
|
109
|
+
[K in keyof T as (
|
|
110
|
+
Or<
|
|
111
|
+
// Omit never keys
|
|
112
|
+
IfNever<Exclude<T[K], undefined>>,
|
|
113
|
+
// Omit required
|
|
114
|
+
IfEquals<{ [Q in K]: T[K] }, { readonly [Q in K]: T[K] }, false, true>
|
|
115
|
+
> extends true ? never : K
|
|
116
|
+
)]:
|
|
117
|
+
// Deep process arrays
|
|
118
|
+
Exclude<T[K], undefined> extends (infer U)[] ? DeeperPickReadonly<U>[]
|
|
119
|
+
// Do not deep process No-Deep values
|
|
120
|
+
: IfNoDeepValue<Exclude<T[K], undefined>> extends true ? T[K]
|
|
121
|
+
// Deep process objects
|
|
122
|
+
: DeeperPickReadonly<Exclude<T[K], undefined>>
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Pick all readonly properties in T deeply including arrays
|
|
127
|
+
*/
|
|
128
|
+
export type DeeperOmitReadonly<T> = {
|
|
129
|
+
[K in keyof T as (
|
|
130
|
+
Or<
|
|
131
|
+
// Omit never keys
|
|
132
|
+
IfNever<Exclude<T[K], undefined>>,
|
|
133
|
+
// Omit required
|
|
134
|
+
IfEquals<{ [Q in K]: T[K] }, { readonly [Q in K]: T[K] }>
|
|
135
|
+
> extends true ? never : K
|
|
136
|
+
)]:
|
|
137
|
+
// Deep process arrays
|
|
138
|
+
Exclude<T[K], undefined> extends (infer U)[] ? DeeperOmitReadonly<U>[]
|
|
139
|
+
// Do not deep process No-Deep values
|
|
140
|
+
: IfNoDeepValue<Exclude<T[K], undefined>> extends true ? T[K]
|
|
141
|
+
// Deep process objects
|
|
142
|
+
: DeeperOmitReadonly<Exclude<T[K], undefined>>
|
|
143
|
+
};
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { IfNoDeepValue } from './helpers';
|
|
2
|
+
import { Or } from './logical.js';
|
|
3
|
+
import { OmitTypes } from './omit.js';
|
|
4
|
+
import { IfEquals, IfNever } from './type-check';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Marks given keys as required
|
|
8
|
+
*/
|
|
9
|
+
export type RequiredSome<T, K extends keyof T> = OmitTypes<Required<Pick<T, K>>, null> & Omit<T, K>;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Make all properties in T required deeply
|
|
13
|
+
*/
|
|
14
|
+
export type DeepRequired<T> = {
|
|
15
|
+
[K in keyof T as (IfNever<Exclude<T[K], undefined>, never, K>)]-?:
|
|
16
|
+
// Do not deep process No-Deep values
|
|
17
|
+
IfNoDeepValue<Exclude<T[K], undefined>> extends true ? Exclude<T[K], undefined>
|
|
18
|
+
// Deep process objects
|
|
19
|
+
: DeepRequired<Exclude<T[K], undefined>>
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Make all properties in T required deeply including arrays
|
|
25
|
+
*/
|
|
26
|
+
export type DeeperRequired<T> = {
|
|
27
|
+
[K in keyof T as (IfNever<Exclude<T[K], undefined>, never, K>)]-?:
|
|
28
|
+
// Deep process arrays
|
|
29
|
+
Exclude<T[K], undefined> extends (infer U)[] ? DeeperRequired<U>[]
|
|
30
|
+
// Do not deep process No-Deep values
|
|
31
|
+
: IfNoDeepValue<Exclude<T[K], undefined>> extends true ? Exclude<T[K], undefined>
|
|
32
|
+
// Deep process objects
|
|
33
|
+
: DeepRequired<Exclude<T[K], undefined>>
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* RequiredKeys
|
|
38
|
+
* @desc Returns required keys of an object
|
|
39
|
+
*/
|
|
40
|
+
export type RequiredKeys<T> = keyof PickRequired<T>;
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Pick all required properties in T
|
|
45
|
+
*/
|
|
46
|
+
export type PickRequired<T> = {
|
|
47
|
+
[K in keyof T as (
|
|
48
|
+
Or<
|
|
49
|
+
// Omit never keys
|
|
50
|
+
IfNever<Exclude<T[K], undefined>>,
|
|
51
|
+
// Omit optional
|
|
52
|
+
IfEquals<{ [Q in K]: T[K] }, { [Q in K]?: T[K] }>
|
|
53
|
+
> extends true ? never : K
|
|
54
|
+
)]: T[K]
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Pick all required properties in T
|
|
59
|
+
*/
|
|
60
|
+
export type OmitRequired<T> = {
|
|
61
|
+
[K in keyof T as (
|
|
62
|
+
Or<
|
|
63
|
+
// Omit never keys
|
|
64
|
+
IfNever<Exclude<T[K], undefined>>,
|
|
65
|
+
// Omit optional
|
|
66
|
+
IfEquals<{ [Q in K]: T[K] }, { [Q in K]?: T[K] }, false, true>
|
|
67
|
+
> extends true ? never : K
|
|
68
|
+
)]: T[K]
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Pick all required properties in T deeply
|
|
73
|
+
*/
|
|
74
|
+
export type DeepPickRequired<T> = {
|
|
75
|
+
[K in keyof T as (
|
|
76
|
+
Or<
|
|
77
|
+
// Omit never keys
|
|
78
|
+
IfNever<Exclude<T[K], undefined>>,
|
|
79
|
+
// Omit optional
|
|
80
|
+
IfEquals<{ [Q in K]: T[K] }, { [Q in K]?: T[K] }>
|
|
81
|
+
> extends true ? never : K
|
|
82
|
+
)]:
|
|
83
|
+
// Do not deep process No-Deep values
|
|
84
|
+
IfNoDeepValue<Exclude<T[K], undefined>> extends true ? T[K]
|
|
85
|
+
// Deep process objects
|
|
86
|
+
: DeepPickRequired<Exclude<T[K], undefined>>
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Omit all required properties in T deeply
|
|
91
|
+
*/
|
|
92
|
+
export type DeepOmitRequired<T> = {
|
|
93
|
+
[K in keyof T as (
|
|
94
|
+
Or<
|
|
95
|
+
// Omit never keys
|
|
96
|
+
IfNever<Exclude<T[K], undefined>>,
|
|
97
|
+
// Omit required
|
|
98
|
+
IfEquals<{ [Q in K]: T[K] }, { [Q in K]-?: T[K] }>
|
|
99
|
+
> extends true ? never : K
|
|
100
|
+
)]?:
|
|
101
|
+
// Do not deep process No-Deep values
|
|
102
|
+
IfNoDeepValue<Exclude<T[K], undefined>> extends true ? T[K]
|
|
103
|
+
// Deep process objects
|
|
104
|
+
: DeepOmitRequired<Exclude<T[K], undefined>>
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Pick all required properties in T deeply including arrays
|
|
109
|
+
*/
|
|
110
|
+
export type DeeperPickRequired<T> = {
|
|
111
|
+
[K in keyof T as (
|
|
112
|
+
Or<
|
|
113
|
+
// Omit never keys
|
|
114
|
+
IfNever<Exclude<T[K], undefined>>,
|
|
115
|
+
// Omit required
|
|
116
|
+
IfEquals<{ [Q in K]: T[K] }, { [Q in K]?: T[K] }>
|
|
117
|
+
> extends true ? never : K
|
|
118
|
+
)]:
|
|
119
|
+
// Deep process arrays
|
|
120
|
+
Exclude<T[K], undefined> extends (infer U)[] ? DeeperPickRequired<U>[]
|
|
121
|
+
// Do not deep process No-Deep values
|
|
122
|
+
: IfNoDeepValue<Exclude<T[K], undefined>> extends true ? T[K]
|
|
123
|
+
// Deep process objects
|
|
124
|
+
: DeeperPickRequired<Exclude<T[K], undefined>>
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Omit all required properties in T deeply including arrays
|
|
129
|
+
*/
|
|
130
|
+
export type DeeperOmitRequired<T> = {
|
|
131
|
+
[K in keyof T as (
|
|
132
|
+
Or<
|
|
133
|
+
// Omit never keys
|
|
134
|
+
IfNever<Exclude<T[K], undefined>>,
|
|
135
|
+
// Omit required
|
|
136
|
+
IfEquals<{ [Q in K]: T[K] }, { [Q in K]-?: T[K] }>
|
|
137
|
+
> extends true ? never : K
|
|
138
|
+
)]:
|
|
139
|
+
// Deep process arrays
|
|
140
|
+
Exclude<T[K], undefined> extends (infer U)[] ? DeeperOmitRequired<U>[]
|
|
141
|
+
// Do not deep process No-Deep values
|
|
142
|
+
: IfNoDeepValue<Exclude<T[K], undefined>> extends true ? T[K]
|
|
143
|
+
// Deep process objects
|
|
144
|
+
: DeeperOmitRequired<Exclude<T[K], undefined>>
|
|
145
|
+
};
|
package/lib/type-check.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Primitive, Type } from './
|
|
1
|
+
import { Primitive, Type } from './types';
|
|
2
2
|
|
|
3
3
|
type NonObj = Primitive | Function;
|
|
4
4
|
|
|
@@ -20,10 +20,11 @@ export type IfNever<T, Y = true, N = false> =
|
|
|
20
20
|
export type IfUndefined<T, Y = true, N = false> =
|
|
21
21
|
IfEquals<T, undefined, Y, N>;
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
/**
|
|
24
|
+
* Returns "Y" if "T" is "never", "N" otherwise
|
|
25
|
+
*/
|
|
26
|
+
export type IfSymbol<T, Y = true, N = false> =
|
|
27
|
+
IfEquals<T, symbol, Y, N>;
|
|
27
28
|
|
|
28
29
|
/**
|
|
29
30
|
* Returns Y if typeof T is "unknown", N otherwise
|
|
@@ -62,30 +63,16 @@ export type IfTupleOrAny<T, Y = true, N = false> =
|
|
|
62
63
|
*/
|
|
63
64
|
export type IfPrimitive<T, Y = true, N = false> =
|
|
64
65
|
IfNever<T> extends true ? N :
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
T extends
|
|
68
|
-
N
|
|
66
|
+
IfNull<T> extends true ? Y :
|
|
67
|
+
IfUndefined<T> extends true ? Y :
|
|
68
|
+
IfClass<T> extends true ? N :
|
|
69
|
+
IfFunction<T> extends true ? N :
|
|
70
|
+
T extends Primitive ? Y :
|
|
71
|
+
N;
|
|
69
72
|
|
|
70
73
|
export type IfPrimitiveOrAny<T, Y = true, N = false> =
|
|
71
74
|
IfAny<T> extends true ? Y : IfPrimitive<T, Y, N>;
|
|
72
75
|
|
|
73
|
-
/**
|
|
74
|
-
* Returns Y if typeof T is JSON like, N otherwise
|
|
75
|
-
*/
|
|
76
|
-
export type IfJson<T, Y = true, N = false> =
|
|
77
|
-
IfAny<T> extends true ? Y :
|
|
78
|
-
IfNull<T> extends true ? Y :
|
|
79
|
-
IfNever<T> extends true ? N :
|
|
80
|
-
T extends Function ? N :
|
|
81
|
-
T extends symbol ? N :
|
|
82
|
-
IfUndefined<T> extends true ? N :
|
|
83
|
-
T extends (infer U)[] ? IfJson<U> extends true ? Y : N
|
|
84
|
-
: Y;
|
|
85
|
-
|
|
86
|
-
export type IfJsonOrAny<T, Y = true, N = false> =
|
|
87
|
-
IfAny<T> extends true ? Y : IfJson<T, Y, N>;
|
|
88
|
-
|
|
89
76
|
/**
|
|
90
77
|
* Returns Y if typeof T is an empty object, N otherwise
|
|
91
78
|
*/
|
|
@@ -111,11 +98,9 @@ export type IfObjectOrAny<T, Y = true, N = false> =
|
|
|
111
98
|
*/
|
|
112
99
|
export type IfFunction<T, Y = true, N = false> =
|
|
113
100
|
IfNever<T> extends true ? N
|
|
114
|
-
:
|
|
115
|
-
:
|
|
116
|
-
:
|
|
117
|
-
: T extends Function ? Y
|
|
118
|
-
: N;
|
|
101
|
+
: T extends Type ? N
|
|
102
|
+
: T extends Function ? Y
|
|
103
|
+
: N;
|
|
119
104
|
|
|
120
105
|
export type IfFunctionOrAny<T, Y = true, N = false> =
|
|
121
106
|
IfAny<T> extends true ? Y : IfFunction<T, Y, N>;
|
|
@@ -126,9 +111,7 @@ export type IfFunctionOrAny<T, Y = true, N = false> =
|
|
|
126
111
|
export type IfClass<T, Y = true, N = false> =
|
|
127
112
|
IfNever<T> extends true ? N
|
|
128
113
|
: IfUndefined<T> extends true ? N
|
|
129
|
-
:
|
|
130
|
-
: T extends Type ? Y
|
|
131
|
-
: N;
|
|
114
|
+
: T extends Type ? Y : N;
|
|
132
115
|
|
|
133
116
|
export type IfClassOrAny<T, Y = true, N = false> =
|
|
134
117
|
IfAny<T> extends true ? Y : IfClass<T, Y, N>;
|
|
@@ -137,16 +120,15 @@ export type IfClassOrAny<T, Y = true, N = false> =
|
|
|
137
120
|
/**
|
|
138
121
|
* Returns "Y" if "T1" is exactly same with "T2", "N" otherwise
|
|
139
122
|
*/
|
|
140
|
-
type EqualsWrapped<T> = T extends infer R & {}
|
|
141
|
-
? {
|
|
142
|
-
[P in keyof R]: R[P]
|
|
143
|
-
}
|
|
144
|
-
: never
|
|
145
123
|
export type IfEquals<T1, T2, Y = true, N = false> =
|
|
146
124
|
IfObject<T1> | IfObject<T2> extends true
|
|
147
125
|
? ((<G>() => G extends EqualsWrapped<T1> ? 1 : 2) extends (<G>() => G extends EqualsWrapped<T2> ? 1 : 2) ? Y : N)
|
|
148
126
|
: ((<G>() => G extends T1 ? 1 : 2) extends (<G>() => G extends T2 ? 1 : 2) ? Y : N);
|
|
149
127
|
|
|
128
|
+
type EqualsWrapped<T> = T extends infer R & {}
|
|
129
|
+
? { [P in keyof R]: R[P] }
|
|
130
|
+
: never;
|
|
131
|
+
|
|
150
132
|
/**
|
|
151
133
|
* Returns "Y" if type "T" matches "U", "N" otherwise
|
|
152
134
|
*/
|
|
@@ -29,22 +29,27 @@ export type Builtin = Primitive | Function | String | Number | Date | Error | Re
|
|
|
29
29
|
URL | ReadableStream | WritableStream;
|
|
30
30
|
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
33
|
-
* @desc
|
|
32
|
+
* Type
|
|
33
|
+
* @desc Represents constructor of type T
|
|
34
34
|
*/
|
|
35
|
-
export
|
|
35
|
+
export interface Type<T = any> {
|
|
36
|
+
new(...args: any[]): T;
|
|
37
|
+
}
|
|
36
38
|
|
|
37
39
|
/**
|
|
38
|
-
*
|
|
39
|
-
* @desc
|
|
40
|
+
* Class
|
|
41
|
+
* @desc Represents Class constructor of type T
|
|
40
42
|
*/
|
|
41
|
-
export type
|
|
43
|
+
export type Class<Args extends any[] = any[], Instance = {}, Static = {}> =
|
|
44
|
+
(new(...args: Args) => Instance) & Static;
|
|
45
|
+
|
|
46
|
+
|
|
42
47
|
|
|
43
48
|
/**
|
|
44
|
-
*
|
|
45
|
-
* @desc Type representing
|
|
49
|
+
* Maybe
|
|
50
|
+
* @desc Type representing T | undefined
|
|
46
51
|
*/
|
|
47
|
-
export type
|
|
52
|
+
export type Maybe<T> = T | undefined;
|
|
48
53
|
|
|
49
54
|
|
|
50
55
|
export type Awaited<T> = T extends PromiseLike<infer U> ? U : T;
|
|
@@ -68,39 +73,3 @@ export type PropertyType<T, K extends keyof T> = T[K];
|
|
|
68
73
|
*/
|
|
69
74
|
export type ElementType<T extends { [P in K & any]: any },
|
|
70
75
|
K extends keyof T | number> = T[K];
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Type
|
|
75
|
-
* @desc Represents constructor of type T
|
|
76
|
-
*/
|
|
77
|
-
export interface Type<T = any> {
|
|
78
|
-
new(...args: any[]): T;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Class
|
|
83
|
-
* @desc Represents Class constructor of type T
|
|
84
|
-
*/
|
|
85
|
-
export type Class<Args extends any[] = any[], Instance = {}, Static = {}> =
|
|
86
|
-
(new(...args: Args) => Instance) & Static;
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* NoUnion
|
|
90
|
-
* @desc Returns "never" if the type is union
|
|
91
|
-
*/
|
|
92
|
-
type NoUnion<T, U = T> = T extends U ? [U] extends [T] ? T : never : never;
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Opaque
|
|
97
|
-
* @desc Create unique type that can't be assigned to base type by accident.
|
|
98
|
-
*/
|
|
99
|
-
declare namespace Symbols {
|
|
100
|
-
export const base: unique symbol;
|
|
101
|
-
export const brand: unique symbol;
|
|
102
|
-
}
|
|
103
|
-
type Opaque<T, N extends string> = T & {
|
|
104
|
-
readonly [Symbols.base]: N;
|
|
105
|
-
readonly [Symbols.brand]: N;
|
|
106
|
-
}
|
package/package.json
CHANGED
package/lib/deep-buildable.d.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { DeepOmitNever, HighDeepOmitNever } from './deep-omit.js';
|
|
2
|
-
import { IfNoDeepValue } from './helpers.js';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Combination of Partial and Writable but deeply
|
|
6
|
-
*/
|
|
7
|
-
export type DeepBuildable<T> = DeepOmitNever<_DeepBuildable<T>>;
|
|
8
|
-
type _DeepBuildable<T> =
|
|
9
|
-
IfNoDeepValue<T> extends true ? T
|
|
10
|
-
: { -readonly [P in keyof T]?: _DeepBuildable<Exclude<T[P], undefined>> };
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Combination of Partial and Writable but deeply including arrays
|
|
14
|
-
*/
|
|
15
|
-
export type HighDeepBuildable<T> = HighDeepOmitNever<_HighDeepBuildable<T>>;
|
|
16
|
-
type _HighDeepBuildable<T> =
|
|
17
|
-
T extends (infer U)[] ? _HighDeepBuildable<U>[]
|
|
18
|
-
: IfNoDeepValue<T> extends true ? T
|
|
19
|
-
: T extends (infer U)[] ? _HighDeepBuildable<U>[]
|
|
20
|
-
: { -readonly [P in keyof T]?: _HighDeepBuildable<Exclude<T[P], undefined>> };
|
package/lib/deep-nullish.d.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { DeepRequired, HighDeepRequired } from './deep-required.js';
|
|
2
|
-
import { IfNoDeepValue } 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
|
-
IfNoDeepValue<T> extends true ? T
|
|
10
|
-
: { [P in keyof T]?: _DeepNullish<Exclude<T[P], undefined>> | null };
|
|
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
|
-
: IfNoDeepValue<T> extends true ? T
|
|
20
|
-
: { [P in keyof T]?: _HighDeepNullish<Exclude<T[P], undefined>> | null };
|
|
21
|
-
|
package/lib/deep-omit.d.ts
DELETED
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import { IfNoDeepValue } from './helpers.js';
|
|
2
|
-
import { OptionalKeys, ReadonlyKeys, RequiredKeys, WritableKeys } from './keys';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Omit all optional properties in T deeply
|
|
6
|
-
*/
|
|
7
|
-
export type DeepOmitOptional<T> = DeepOmitNever<_DeepOmitOptional<T>>;
|
|
8
|
-
type _DeepOmitOptional<T, K extends keyof T = Exclude<keyof T, OptionalKeys<T>>> =
|
|
9
|
-
IfNoDeepValue<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> = HighDeepOmitNever<_HighDeepOmitOptional<T>>;
|
|
16
|
-
type _HighDeepOmitOptional<T, K extends keyof T = Exclude<keyof T, OptionalKeys<T>>> =
|
|
17
|
-
T extends (infer U)[] ? _HighDeepOmitOptional<U>[]
|
|
18
|
-
: IfNoDeepValue<T> extends true ? T
|
|
19
|
-
: { [P in K]-?: _HighDeepOmitOptional<Exclude<T[P], undefined>> };
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Omit all required properties in T deeply
|
|
24
|
-
*/
|
|
25
|
-
export type DeepOmitRequired<T> = DeepOmitNever<_DeepOmitRequired<T>>;
|
|
26
|
-
type _DeepOmitRequired<T, J extends keyof T = Exclude<keyof T, RequiredKeys<T>>> =
|
|
27
|
-
IfNoDeepValue<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> = HighDeepOmitNever<_HighDeepOmitRequired<T>>;
|
|
35
|
-
type _HighDeepOmitRequired<T, J extends keyof T = Exclude<keyof T, RequiredKeys<T>>> =
|
|
36
|
-
T extends (infer U)[] ? _HighDeepOmitRequired<U>[]
|
|
37
|
-
: IfNoDeepValue<T> extends true ? T
|
|
38
|
-
: { [P in J]?: _HighDeepOmitRequired<Exclude<T[P], undefined>> };
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Omit all readonly properties in T deeply
|
|
43
|
-
*/
|
|
44
|
-
export type DeepOmitReadonly<T> = DeepOmitNever<_DeepOmitReadonly<Exclude<T, undefined>>>;
|
|
45
|
-
type _DeepOmitReadonly<T, J extends keyof T = Exclude<keyof T, ReadonlyKeys<T>>> =
|
|
46
|
-
IfNoDeepValue<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> = HighDeepOmitNever<_HighDeepOmitReadonly<T>>;
|
|
54
|
-
type _HighDeepOmitReadonly<T, J extends keyof T = Exclude<keyof T, ReadonlyKeys<T>>> =
|
|
55
|
-
T extends (infer U)[] ? _HighDeepOmitReadonly<U>[]
|
|
56
|
-
: IfNoDeepValue<T> extends true ? T
|
|
57
|
-
: { [P in J]: _HighDeepOmitReadonly<Exclude<T[P], undefined>> };
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Omit all writable properties in T deeply
|
|
62
|
-
*/
|
|
63
|
-
export type DeepOmitWritable<T> = DeepOmitNever<_DeepOmitWritable<T>>
|
|
64
|
-
type _DeepOmitWritable<T, K extends keyof T = Exclude<keyof T, WritableKeys<T>>> =
|
|
65
|
-
IfNoDeepValue<T> extends true ? T
|
|
66
|
-
: { readonly [P in K]: _DeepOmitWritable<Exclude<T[P], undefined>> }
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Omit all writable properties in T deeply including arrays
|
|
71
|
-
*/
|
|
72
|
-
export type HighDeepOmitWritable<T> = HighDeepOmitNever<_HighDeepOmitWritable<T>>
|
|
73
|
-
type _HighDeepOmitWritable<T, K extends keyof T = Exclude<keyof T, WritableKeys<T>>> =
|
|
74
|
-
T extends (infer U)[] ? _HighDeepOmitWritable<U>[]
|
|
75
|
-
: IfNoDeepValue<T> extends true ? T
|
|
76
|
-
: { readonly [P in K]: _HighDeepOmitWritable<Exclude<T[P], undefined>> }
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Omit all "never" and "undefined" properties in T deeply
|
|
80
|
-
*/
|
|
81
|
-
export type DeepOmitNever<T> = _DeepOmitNever<T>
|
|
82
|
-
type _DeepOmitNever<T> =
|
|
83
|
-
IfNoDeepValue<T> extends true ? T
|
|
84
|
-
: { [P in keyof T as (Exclude<T[P], undefined> extends never ? never : P)]: _DeepOmitNever<Exclude<T[P], undefined>> }
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Omit all "never" and "undefined" properties in T deeply including arrays
|
|
89
|
-
*/
|
|
90
|
-
export type HighDeepOmitNever<T> = _HighDeepOmitNever<T>
|
|
91
|
-
type _HighDeepOmitNever<T> =
|
|
92
|
-
T extends (infer U)[] ? _HighDeepOmitNever<U>[]
|
|
93
|
-
: IfNoDeepValue<T> extends true ? T
|
|
94
|
-
: { [P in keyof T as (Exclude<T[P], undefined> extends never ? never : P)]: _HighDeepOmitNever<Exclude<T[P], undefined>> }
|
package/lib/deep-partial.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { IfNoDeepValue } from './helpers.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Partial but deeply
|
|
5
|
-
*/
|
|
6
|
-
export type DeepPartial<T> = _DeepPartial<T>;
|
|
7
|
-
type _DeepPartial<T> =
|
|
8
|
-
IfNoDeepValue<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
|
-
: IfNoDeepValue<T> extends true ? T
|
|
18
|
-
: { [P in keyof T]?: _HighDeepPartial<Exclude<T[P], undefined>> };
|