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.
@@ -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
+ };
@@ -1,4 +1,4 @@
1
- import { Primitive, Type } from './common';
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
- // export type IfUndefined<T, Y = true, N = false> =
24
- // IfEquals<T, undefined, Y, N> extends Y ? Y
25
- // : undefined extends T ? Y : N;
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
- IfClass<T> extends true ? N :
66
- IfFunction<T> extends true ? N :
67
- T extends Primitive ? Y :
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
- : IfUndefined<T> extends true ? N
115
- : IfNull<T> extends true ? N
116
- : T extends Type ? N
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
- : IfNull<T> extends true ? N
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
- * Maybe
33
- * @desc Type representing T | undefined
32
+ * Type
33
+ * @desc Represents constructor of type T
34
34
  */
35
- export type Maybe<T> = T | undefined;
35
+ export interface Type<T = any> {
36
+ new(...args: any[]): T;
37
+ }
36
38
 
37
39
  /**
38
- * Nullish
39
- * @desc Type representing [nullish values][https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#nullish-coalescing] in TypeScript: `null | undefined`
40
+ * Class
41
+ * @desc Represents Class constructor of type T
40
42
  */
41
- export type Nullish<T = null> = T | undefined | null;
43
+ export type Class<Args extends any[] = any[], Instance = {}, Static = {}> =
44
+ (new(...args: Args) => Instance) & Static;
45
+
46
+
42
47
 
43
48
  /**
44
- * Falsy
45
- * @desc Type representing falsy values in TypeScript: `false | "" | 0 | null | undefined`
49
+ * Maybe
50
+ * @desc Type representing T | undefined
46
51
  */
47
- export type Falsy = false | '' | 0 | null | undefined;
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
@@ -12,7 +12,7 @@
12
12
  "lodash",
13
13
  "underscore"
14
14
  ],
15
- "version": "2.9.2",
15
+ "version": "3.0.0",
16
16
  "types": "lib/index.d.ts",
17
17
  "main": "lib/index.js",
18
18
  "module": "lib/index.js",
@@ -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>> };
@@ -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
-
@@ -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>> }
@@ -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>> };