mol_type_all 0.0.1826 → 0.0.1828
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/node.d.ts +113 -0
- package/node.d.ts.map +1 -1
- package/package.json +1 -1
- package/web.d.ts +113 -0
- package/web.d.ts.map +1 -1
package/node.d.ts
CHANGED
|
@@ -15,6 +15,12 @@ declare namespace $ {
|
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
declare namespace $ {
|
|
18
|
+
/**
|
|
19
|
+
* Return `unknown` when `A` and `B` are the same type. `never` otherwise.
|
|
20
|
+
*
|
|
21
|
+
* $mol_type_equals< unknown , any > & number // never
|
|
22
|
+
* $mol_type_equals< never , never > & number // number
|
|
23
|
+
*/
|
|
18
24
|
type $mol_type_equals<A, B> = (<X>() => X extends A ? 1 : 2) extends (<X>() => X extends B ? 1 : 2) ? unknown : never;
|
|
19
25
|
}
|
|
20
26
|
|
|
@@ -25,22 +31,46 @@ declare namespace $ {
|
|
|
25
31
|
}
|
|
26
32
|
|
|
27
33
|
declare namespace $ {
|
|
34
|
+
/**
|
|
35
|
+
* Asserts for equality of `Actual` and `Expected` types.
|
|
36
|
+
* Don't use `never` as `Expected` - use `mol_type_assert_never` instead.
|
|
37
|
+
*/
|
|
28
38
|
type $mol_type_assert<Actual, Expected extends $mol_type_equals<Actual, Expected> | $mol_type_error<'Assert failed', {
|
|
29
39
|
actual: Actual;
|
|
30
40
|
expected: Expected;
|
|
31
41
|
}>> = Actual;
|
|
42
|
+
/**
|
|
43
|
+
* Asserts for `Actual` type is `never`.
|
|
44
|
+
*
|
|
45
|
+
* $mol_type_assert_never< $mol_type_equals< 1 , 2 > >
|
|
46
|
+
*/
|
|
32
47
|
type $mol_type_assert_never<Actual extends never> = Actual;
|
|
33
48
|
}
|
|
34
49
|
|
|
35
50
|
declare namespace $ {
|
|
51
|
+
/**
|
|
52
|
+
* Returns `Tuple` without first element.
|
|
53
|
+
*
|
|
54
|
+
* $mol_type_tail<[ 1 , 2 , 3 ]> // [ 2, 3 ]
|
|
55
|
+
*/
|
|
36
56
|
type $mol_type_tail<Tuple extends readonly any[]> = ((...tail: Tuple) => any) extends ((head: any, ...tail: infer Tail) => any) ? Tail : never;
|
|
37
57
|
}
|
|
38
58
|
|
|
39
59
|
declare namespace $ {
|
|
60
|
+
/**
|
|
61
|
+
* Returns `Tuple` pushed by `Item`.
|
|
62
|
+
*
|
|
63
|
+
* $mol_type_tail< [ 1 , 2 ] , 3 > // [ 1 , 2 , 3 ]
|
|
64
|
+
*/
|
|
40
65
|
type $mol_type_append<Tuple extends readonly any[], Item extends any> = [...Tuple, Item];
|
|
41
66
|
}
|
|
42
67
|
|
|
43
68
|
declare namespace $ {
|
|
69
|
+
/**
|
|
70
|
+
* Returns first element of `Tuple`.
|
|
71
|
+
*
|
|
72
|
+
* $mol_type_tail<[ 1 , 2 , 3 ]> // 1
|
|
73
|
+
*/
|
|
44
74
|
type $mol_type_head<Tuple extends readonly any[]> = Tuple['length'] extends 0 ? never : Tuple[0];
|
|
45
75
|
}
|
|
46
76
|
|
|
@@ -72,16 +102,19 @@ declare namespace $ {
|
|
|
72
102
|
type Up<Value extends number, Res extends Int = Zero> = Value extends Down<Res> ? Res : Up<Value, Next<Res>>;
|
|
73
103
|
type Next<Value extends Int> = Plus<[Value, One]>;
|
|
74
104
|
type Prev<Value extends Int> = Minus<[Value, One]>;
|
|
105
|
+
/** Number literal which is sum of two another */
|
|
75
106
|
export type $mol_type_int_plus<Left extends Check<Left>, Right extends Check<Right>> = Down<Plus<[
|
|
76
107
|
Parse<`${Left}`>,
|
|
77
108
|
Parse<`${Right}`>
|
|
78
109
|
]>>;
|
|
79
110
|
type Plus<Arg extends Pair> = [...Arg[0], ...Arg[1]];
|
|
111
|
+
/** Number literal which is subtract of two another */
|
|
80
112
|
export type $mol_type_int_minus<Left extends Check<Left>, Right extends Check<Right>> = Down<Minus<[
|
|
81
113
|
Parse<`${Left}`>,
|
|
82
114
|
Parse<`${Right}`>
|
|
83
115
|
]>>;
|
|
84
116
|
type Minus<Arg extends Pair> = Arg[0] extends [...Arg[1], ...infer Res] ? Extract<Res, Int> : never;
|
|
117
|
+
/** Number literal which is multiply of two another */
|
|
85
118
|
export type $mol_type_int_mult<Left extends Check<Left>, Right extends Check<Right>> = Down<Mult<[
|
|
86
119
|
Parse<`${Left}`>,
|
|
87
120
|
Parse<`${Right}`>
|
|
@@ -90,6 +123,7 @@ declare namespace $ {
|
|
|
90
123
|
Arg[0],
|
|
91
124
|
Prev<Arg[1]>
|
|
92
125
|
], Plus<[Res, Arg[0]]>>;
|
|
126
|
+
/** Number literal which is power one to another */
|
|
93
127
|
export type $mol_type_int_pow<Left extends Check<Left>, Right extends Check<Right>> = Down<Pow<[
|
|
94
128
|
Parse<`${Left}`>,
|
|
95
129
|
Parse<`${Right}`>
|
|
@@ -98,6 +132,10 @@ declare namespace $ {
|
|
|
98
132
|
Arg[0],
|
|
99
133
|
Prev<Arg[1]>
|
|
100
134
|
], Mult<[Res, Arg[0]]>>;
|
|
135
|
+
/**
|
|
136
|
+
* Range of number literals from Lo up to Hi
|
|
137
|
+
* **Slow on large ranges**
|
|
138
|
+
*/
|
|
101
139
|
export type $mol_type_int_range<Lo extends Check<Lo>, Hi extends Check<Hi>> = Down<Range<[
|
|
102
140
|
Parse<`${Lo}`>,
|
|
103
141
|
Parse<`${Hi}`>
|
|
@@ -106,17 +144,29 @@ declare namespace $ {
|
|
|
106
144
|
Args[0],
|
|
107
145
|
Parse<Exclude<keyof Minus<[Args[1], Args[0]]>, symbol | number>>
|
|
108
146
|
]> : never;
|
|
147
|
+
/** Unknown when number literals is ordered */
|
|
109
148
|
export type $mol_type_int_ordered<Left extends Check<Left>, Right extends Check<Right>> = keyof Parse<`${Left}`> extends keyof Parse<`${Right}`> ? unknown : never;
|
|
110
149
|
type Calc<Expr extends string> = Expr extends `${infer Left}(${infer Inner})${infer Right}` ? Calc<`${Left}${Down<Calc<Inner>>}${Right}`> : Expr extends `${infer Left}..${infer Right}` ? Range<[Calc<Left>, Calc<Right>]> : Expr extends `${infer Left}+${infer Right}` ? Plus<[Calc<Left>, Calc<Right>]> : Expr extends `${infer Left}-${infer Right}` ? Minus<[Calc<Left>, Calc<Right>]> : Expr extends `${infer Left}*${infer Right}` ? Mult<[Calc<Left>, Calc<Right>]> : Expr extends `${infer Left}^${infer Right}` ? Pow<[Calc<Left>, Calc<Right>]> : Expr extends `${infer Left} ` ? Calc<Left> : Expr extends ` ${infer Right}` ? Calc<Right> : Parse<Expr>;
|
|
150
|
+
/** Evaluates simple expression */
|
|
111
151
|
export type $mol_type_int_calc<Expr extends string> = Down<Calc<Expr>>;
|
|
112
152
|
export {};
|
|
113
153
|
}
|
|
114
154
|
|
|
115
155
|
declare namespace $ {
|
|
156
|
+
/**
|
|
157
|
+
* Converts union of types to intersection of same types
|
|
158
|
+
*
|
|
159
|
+
* $mol_type_intersect< number | string > // number & string
|
|
160
|
+
*/
|
|
116
161
|
type $mol_type_intersect<Union> = (Union extends any ? (_: Union) => void : never) extends ((_: infer Intersection) => void) ? Intersection : never;
|
|
117
162
|
}
|
|
118
163
|
|
|
119
164
|
declare namespace $ {
|
|
165
|
+
/**
|
|
166
|
+
* Extracts keys from `Input` which values extends `Upper` and extendable by `Lower`.
|
|
167
|
+
*
|
|
168
|
+
* type MathConstants = $mol_type_keys_extract< Math , number > // "E" | "PI" ...
|
|
169
|
+
*/
|
|
120
170
|
type $mol_type_keys_extract<Input, Upper, Lower = never> = {
|
|
121
171
|
[Field in keyof Input]: unknown extends Input[Field] ? never : Input[Field] extends never ? never : Input[Field] extends Upper ? [
|
|
122
172
|
Lower
|
|
@@ -125,29 +175,62 @@ declare namespace $ {
|
|
|
125
175
|
}
|
|
126
176
|
|
|
127
177
|
declare namespace $ {
|
|
178
|
+
/**
|
|
179
|
+
* Exclude keys from `Input` which values extends `Upper`.
|
|
180
|
+
*
|
|
181
|
+
* type MathConstants = $mol_type_keys_exclude< Math , Function > // "E" | "PI" ...
|
|
182
|
+
*/
|
|
128
183
|
type $mol_type_keys_exclude<Input, Upper> = Exclude<keyof Input, $mol_type_keys_extract<Input, Upper>>;
|
|
129
184
|
}
|
|
130
185
|
|
|
131
186
|
declare namespace $ {
|
|
187
|
+
/**
|
|
188
|
+
* Reqursive converts intersection of records to record of intersections
|
|
189
|
+
*
|
|
190
|
+
* // { a : { x : 1 , y : 2 } }
|
|
191
|
+
* $mol_type_merge< { a : { x : 1 } }&{ a : { y : 2 } } >
|
|
192
|
+
*/
|
|
132
193
|
type $mol_type_merge<Intersection> = Intersection extends (...a: any[]) => any ? Intersection : Intersection extends new (...a: any[]) => any ? Intersection : Intersection extends object ? $mol_type_merge_object<Intersection> extends Intersection ? unknown extends $mol_type_equals<{
|
|
133
194
|
[Key in keyof Intersection]: Intersection[Key];
|
|
134
195
|
}, Intersection> ? Intersection : {
|
|
135
196
|
[Key in keyof Intersection]: $mol_type_merge<Intersection[Key]>;
|
|
136
197
|
} : Intersection : Intersection;
|
|
198
|
+
/**
|
|
199
|
+
* Flat converts intersection of records to record of intersections
|
|
200
|
+
*
|
|
201
|
+
* // { a: 1, b: 2 }
|
|
202
|
+
* $mol_type_merge< { a: 1 } & { b: 2 } >
|
|
203
|
+
*/
|
|
137
204
|
type $mol_type_merge_object<Intersection> = {
|
|
138
205
|
[Key in keyof Intersection]: Intersection[Key];
|
|
139
206
|
};
|
|
140
207
|
}
|
|
141
208
|
|
|
142
209
|
declare namespace $ {
|
|
210
|
+
/**
|
|
211
|
+
* Omit keys from `Input` which values extends `Upper`.
|
|
212
|
+
*
|
|
213
|
+
* type MathConstants = $mol_type_omit< Math , Function > // { E , PI , ... }
|
|
214
|
+
*/
|
|
143
215
|
type $mol_type_omit<Input, Upper> = Pick<Input, $mol_type_keys_exclude<Input, Upper>>;
|
|
144
216
|
}
|
|
145
217
|
|
|
146
218
|
declare namespace $ {
|
|
219
|
+
/**
|
|
220
|
+
* Returns type of function param by index.
|
|
221
|
+
*
|
|
222
|
+
* // 888
|
|
223
|
+
* $mol_type_param< ( a : 777 , b : 888 )=> 666 , 1 >
|
|
224
|
+
*/
|
|
147
225
|
type $mol_type_param<Func, Index extends number> = Func extends (...params: infer Params) => any ? Params[Index] : Func extends new (...params: infer Params2) => any ? Params2[Index] : never;
|
|
148
226
|
}
|
|
149
227
|
|
|
150
228
|
declare namespace $ {
|
|
229
|
+
/**
|
|
230
|
+
* Recursive `Partial`.
|
|
231
|
+
*
|
|
232
|
+
* let props : $mol_type_partial_deep< HTMLElement > = { style : { display : 'block' } }
|
|
233
|
+
*/
|
|
151
234
|
type $mol_type_partial_deep<Val> = Val extends object ? Val extends Function ? Val : {
|
|
152
235
|
[field in keyof Val]?: $mol_type_partial_deep<Val[field]> | undefined;
|
|
153
236
|
} : Val;
|
|
@@ -158,24 +241,53 @@ declare namespace $ {
|
|
|
158
241
|
}
|
|
159
242
|
|
|
160
243
|
declare namespace $ {
|
|
244
|
+
/**
|
|
245
|
+
* Fields that can be set to undefined makes optional
|
|
246
|
+
*
|
|
247
|
+
* type User = $mol_type_partial_undefined<{ name : string , age : number | undefined }> // { name : string , age? : number | undefined }
|
|
248
|
+
*/
|
|
161
249
|
type $mol_type_partial_undefined<Val> = $mol_type_merge<$mol_type_override<Partial<Val>, Pick<Val, {
|
|
162
250
|
[Field in keyof Val]: undefined extends Val[Field] ? never : Field;
|
|
163
251
|
}[keyof Val]>>>;
|
|
164
252
|
}
|
|
165
253
|
|
|
166
254
|
declare namespace $ {
|
|
255
|
+
/**
|
|
256
|
+
* Picks keys from `Input` which values extends `Upper`.
|
|
257
|
+
*
|
|
258
|
+
* type MathConstants = $mol_type_pick< Math , number > // { E , PI , ... }
|
|
259
|
+
*/
|
|
167
260
|
type $mol_type_pick<Input, Upper> = Pick<Input, $mol_type_keys_extract<Input, Upper>>;
|
|
168
261
|
}
|
|
169
262
|
|
|
170
263
|
declare namespace $ {
|
|
264
|
+
/**
|
|
265
|
+
* Returns `Tuple` unshifted by `Item`.
|
|
266
|
+
*
|
|
267
|
+
* $mol_type_tail< 1 , [ 2 , 3 ] > // [ 1 , 2 , 3 ]
|
|
268
|
+
*/
|
|
171
269
|
type $mol_type_prepend<Item extends any, Tuple extends readonly any[]> = ((head: Item, ...args: Tuple) => any) extends ((...args: infer Result) => any) ? Result : never;
|
|
172
270
|
}
|
|
173
271
|
|
|
174
272
|
declare namespace $ {
|
|
273
|
+
/**
|
|
274
|
+
* Returns type of function result or class instance.
|
|
275
|
+
*
|
|
276
|
+
* // 777
|
|
277
|
+
* $mol_type_result< ()=> 777 >
|
|
278
|
+
*
|
|
279
|
+
* // 777
|
|
280
|
+
* $mol_type_result< new()=> 777 >
|
|
281
|
+
*/
|
|
175
282
|
type $mol_type_result<Func> = Func extends (...params: any) => infer Result ? Result : Func extends new (...params: any) => infer Result ? Result : never;
|
|
176
283
|
}
|
|
177
284
|
|
|
178
285
|
declare namespace $ {
|
|
286
|
+
/**
|
|
287
|
+
* Returns reversed `Tuple`.
|
|
288
|
+
*
|
|
289
|
+
* $mol_type_reverse< [ 1 , 2 ,3 ] > // [ 3 , 2 , 1 ]
|
|
290
|
+
*/
|
|
179
291
|
type $mol_type_reverse<Tuple extends readonly any[], Reversed extends readonly any[] = []> = {
|
|
180
292
|
0: Reversed;
|
|
181
293
|
1: $mol_type_reverse<$mol_type_tail<Tuple>, $mol_type_prepend<$mol_type_head<Tuple>, Reversed>>;
|
|
@@ -183,6 +295,7 @@ declare namespace $ {
|
|
|
183
295
|
}
|
|
184
296
|
|
|
185
297
|
declare namespace $ {
|
|
298
|
+
/** Any unary function **/
|
|
186
299
|
type $mol_type_unary_func = ((param: any) => any);
|
|
187
300
|
type $mol_type_unary_class = new (param: any) => any;
|
|
188
301
|
type $mol_type_unary = $mol_type_unary_func | $mol_type_unary_class;
|
package/node.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../mam.d.ts","../../equals/equals.d.ts","../../error/error.d.ts","../../assert/assert.d.ts","../../tail/tail.d.ts","../../append/append.d.ts","../../head/head.d.ts","../../int/int.d.ts","../../intersect/intersect.d.ts","../../keys/extract/extract.d.ts","../../keys/exclude/exclude.d.ts","../../merge/merge.d.ts","../../omit/omit.d.ts","../../param/param.d.ts","../../partial/deep/deep.d.ts","../../override/override.d.ts","../../partial/undefined/undefined.d.ts","../../pick/pick.d.ts","../../prepend/prepend.d.ts","../../result/result.d.ts","../../reverse/reverse.d.ts","../../unary/unary.d.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACfA;AACA;AACA;AACA;
|
|
1
|
+
{"version":3,"sources":["../../../../mam.d.ts","../../equals/equals.d.ts","../../error/error.d.ts","../../assert/assert.d.ts","../../tail/tail.d.ts","../../append/append.d.ts","../../head/head.d.ts","../../int/int.d.ts","../../intersect/intersect.d.ts","../../keys/extract/extract.d.ts","../../keys/exclude/exclude.d.ts","../../merge/merge.d.ts","../../omit/omit.d.ts","../../param/param.d.ts","../../partial/deep/deep.d.ts","../../override/override.d.ts","../../partial/undefined/undefined.d.ts","../../pick/pick.d.ts","../../prepend/prepend.d.ts","../../result/result.d.ts","../../reverse/reverse.d.ts","../../unary/unary.d.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACTA;AACA;AACA;AACA;AACA;AACA;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACVA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACXA;AACA;AACA;AACA;AACA;AACA;AACA","sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]}
|
package/package.json
CHANGED
package/web.d.ts
CHANGED
|
@@ -15,6 +15,12 @@ declare namespace $ {
|
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
declare namespace $ {
|
|
18
|
+
/**
|
|
19
|
+
* Return `unknown` when `A` and `B` are the same type. `never` otherwise.
|
|
20
|
+
*
|
|
21
|
+
* $mol_type_equals< unknown , any > & number // never
|
|
22
|
+
* $mol_type_equals< never , never > & number // number
|
|
23
|
+
*/
|
|
18
24
|
type $mol_type_equals<A, B> = (<X>() => X extends A ? 1 : 2) extends (<X>() => X extends B ? 1 : 2) ? unknown : never;
|
|
19
25
|
}
|
|
20
26
|
|
|
@@ -25,22 +31,46 @@ declare namespace $ {
|
|
|
25
31
|
}
|
|
26
32
|
|
|
27
33
|
declare namespace $ {
|
|
34
|
+
/**
|
|
35
|
+
* Asserts for equality of `Actual` and `Expected` types.
|
|
36
|
+
* Don't use `never` as `Expected` - use `mol_type_assert_never` instead.
|
|
37
|
+
*/
|
|
28
38
|
type $mol_type_assert<Actual, Expected extends $mol_type_equals<Actual, Expected> | $mol_type_error<'Assert failed', {
|
|
29
39
|
actual: Actual;
|
|
30
40
|
expected: Expected;
|
|
31
41
|
}>> = Actual;
|
|
42
|
+
/**
|
|
43
|
+
* Asserts for `Actual` type is `never`.
|
|
44
|
+
*
|
|
45
|
+
* $mol_type_assert_never< $mol_type_equals< 1 , 2 > >
|
|
46
|
+
*/
|
|
32
47
|
type $mol_type_assert_never<Actual extends never> = Actual;
|
|
33
48
|
}
|
|
34
49
|
|
|
35
50
|
declare namespace $ {
|
|
51
|
+
/**
|
|
52
|
+
* Returns `Tuple` without first element.
|
|
53
|
+
*
|
|
54
|
+
* $mol_type_tail<[ 1 , 2 , 3 ]> // [ 2, 3 ]
|
|
55
|
+
*/
|
|
36
56
|
type $mol_type_tail<Tuple extends readonly any[]> = ((...tail: Tuple) => any) extends ((head: any, ...tail: infer Tail) => any) ? Tail : never;
|
|
37
57
|
}
|
|
38
58
|
|
|
39
59
|
declare namespace $ {
|
|
60
|
+
/**
|
|
61
|
+
* Returns `Tuple` pushed by `Item`.
|
|
62
|
+
*
|
|
63
|
+
* $mol_type_tail< [ 1 , 2 ] , 3 > // [ 1 , 2 , 3 ]
|
|
64
|
+
*/
|
|
40
65
|
type $mol_type_append<Tuple extends readonly any[], Item extends any> = [...Tuple, Item];
|
|
41
66
|
}
|
|
42
67
|
|
|
43
68
|
declare namespace $ {
|
|
69
|
+
/**
|
|
70
|
+
* Returns first element of `Tuple`.
|
|
71
|
+
*
|
|
72
|
+
* $mol_type_tail<[ 1 , 2 , 3 ]> // 1
|
|
73
|
+
*/
|
|
44
74
|
type $mol_type_head<Tuple extends readonly any[]> = Tuple['length'] extends 0 ? never : Tuple[0];
|
|
45
75
|
}
|
|
46
76
|
|
|
@@ -72,16 +102,19 @@ declare namespace $ {
|
|
|
72
102
|
type Up<Value extends number, Res extends Int = Zero> = Value extends Down<Res> ? Res : Up<Value, Next<Res>>;
|
|
73
103
|
type Next<Value extends Int> = Plus<[Value, One]>;
|
|
74
104
|
type Prev<Value extends Int> = Minus<[Value, One]>;
|
|
105
|
+
/** Number literal which is sum of two another */
|
|
75
106
|
export type $mol_type_int_plus<Left extends Check<Left>, Right extends Check<Right>> = Down<Plus<[
|
|
76
107
|
Parse<`${Left}`>,
|
|
77
108
|
Parse<`${Right}`>
|
|
78
109
|
]>>;
|
|
79
110
|
type Plus<Arg extends Pair> = [...Arg[0], ...Arg[1]];
|
|
111
|
+
/** Number literal which is subtract of two another */
|
|
80
112
|
export type $mol_type_int_minus<Left extends Check<Left>, Right extends Check<Right>> = Down<Minus<[
|
|
81
113
|
Parse<`${Left}`>,
|
|
82
114
|
Parse<`${Right}`>
|
|
83
115
|
]>>;
|
|
84
116
|
type Minus<Arg extends Pair> = Arg[0] extends [...Arg[1], ...infer Res] ? Extract<Res, Int> : never;
|
|
117
|
+
/** Number literal which is multiply of two another */
|
|
85
118
|
export type $mol_type_int_mult<Left extends Check<Left>, Right extends Check<Right>> = Down<Mult<[
|
|
86
119
|
Parse<`${Left}`>,
|
|
87
120
|
Parse<`${Right}`>
|
|
@@ -90,6 +123,7 @@ declare namespace $ {
|
|
|
90
123
|
Arg[0],
|
|
91
124
|
Prev<Arg[1]>
|
|
92
125
|
], Plus<[Res, Arg[0]]>>;
|
|
126
|
+
/** Number literal which is power one to another */
|
|
93
127
|
export type $mol_type_int_pow<Left extends Check<Left>, Right extends Check<Right>> = Down<Pow<[
|
|
94
128
|
Parse<`${Left}`>,
|
|
95
129
|
Parse<`${Right}`>
|
|
@@ -98,6 +132,10 @@ declare namespace $ {
|
|
|
98
132
|
Arg[0],
|
|
99
133
|
Prev<Arg[1]>
|
|
100
134
|
], Mult<[Res, Arg[0]]>>;
|
|
135
|
+
/**
|
|
136
|
+
* Range of number literals from Lo up to Hi
|
|
137
|
+
* **Slow on large ranges**
|
|
138
|
+
*/
|
|
101
139
|
export type $mol_type_int_range<Lo extends Check<Lo>, Hi extends Check<Hi>> = Down<Range<[
|
|
102
140
|
Parse<`${Lo}`>,
|
|
103
141
|
Parse<`${Hi}`>
|
|
@@ -106,17 +144,29 @@ declare namespace $ {
|
|
|
106
144
|
Args[0],
|
|
107
145
|
Parse<Exclude<keyof Minus<[Args[1], Args[0]]>, symbol | number>>
|
|
108
146
|
]> : never;
|
|
147
|
+
/** Unknown when number literals is ordered */
|
|
109
148
|
export type $mol_type_int_ordered<Left extends Check<Left>, Right extends Check<Right>> = keyof Parse<`${Left}`> extends keyof Parse<`${Right}`> ? unknown : never;
|
|
110
149
|
type Calc<Expr extends string> = Expr extends `${infer Left}(${infer Inner})${infer Right}` ? Calc<`${Left}${Down<Calc<Inner>>}${Right}`> : Expr extends `${infer Left}..${infer Right}` ? Range<[Calc<Left>, Calc<Right>]> : Expr extends `${infer Left}+${infer Right}` ? Plus<[Calc<Left>, Calc<Right>]> : Expr extends `${infer Left}-${infer Right}` ? Minus<[Calc<Left>, Calc<Right>]> : Expr extends `${infer Left}*${infer Right}` ? Mult<[Calc<Left>, Calc<Right>]> : Expr extends `${infer Left}^${infer Right}` ? Pow<[Calc<Left>, Calc<Right>]> : Expr extends `${infer Left} ` ? Calc<Left> : Expr extends ` ${infer Right}` ? Calc<Right> : Parse<Expr>;
|
|
150
|
+
/** Evaluates simple expression */
|
|
111
151
|
export type $mol_type_int_calc<Expr extends string> = Down<Calc<Expr>>;
|
|
112
152
|
export {};
|
|
113
153
|
}
|
|
114
154
|
|
|
115
155
|
declare namespace $ {
|
|
156
|
+
/**
|
|
157
|
+
* Converts union of types to intersection of same types
|
|
158
|
+
*
|
|
159
|
+
* $mol_type_intersect< number | string > // number & string
|
|
160
|
+
*/
|
|
116
161
|
type $mol_type_intersect<Union> = (Union extends any ? (_: Union) => void : never) extends ((_: infer Intersection) => void) ? Intersection : never;
|
|
117
162
|
}
|
|
118
163
|
|
|
119
164
|
declare namespace $ {
|
|
165
|
+
/**
|
|
166
|
+
* Extracts keys from `Input` which values extends `Upper` and extendable by `Lower`.
|
|
167
|
+
*
|
|
168
|
+
* type MathConstants = $mol_type_keys_extract< Math , number > // "E" | "PI" ...
|
|
169
|
+
*/
|
|
120
170
|
type $mol_type_keys_extract<Input, Upper, Lower = never> = {
|
|
121
171
|
[Field in keyof Input]: unknown extends Input[Field] ? never : Input[Field] extends never ? never : Input[Field] extends Upper ? [
|
|
122
172
|
Lower
|
|
@@ -125,29 +175,62 @@ declare namespace $ {
|
|
|
125
175
|
}
|
|
126
176
|
|
|
127
177
|
declare namespace $ {
|
|
178
|
+
/**
|
|
179
|
+
* Exclude keys from `Input` which values extends `Upper`.
|
|
180
|
+
*
|
|
181
|
+
* type MathConstants = $mol_type_keys_exclude< Math , Function > // "E" | "PI" ...
|
|
182
|
+
*/
|
|
128
183
|
type $mol_type_keys_exclude<Input, Upper> = Exclude<keyof Input, $mol_type_keys_extract<Input, Upper>>;
|
|
129
184
|
}
|
|
130
185
|
|
|
131
186
|
declare namespace $ {
|
|
187
|
+
/**
|
|
188
|
+
* Reqursive converts intersection of records to record of intersections
|
|
189
|
+
*
|
|
190
|
+
* // { a : { x : 1 , y : 2 } }
|
|
191
|
+
* $mol_type_merge< { a : { x : 1 } }&{ a : { y : 2 } } >
|
|
192
|
+
*/
|
|
132
193
|
type $mol_type_merge<Intersection> = Intersection extends (...a: any[]) => any ? Intersection : Intersection extends new (...a: any[]) => any ? Intersection : Intersection extends object ? $mol_type_merge_object<Intersection> extends Intersection ? unknown extends $mol_type_equals<{
|
|
133
194
|
[Key in keyof Intersection]: Intersection[Key];
|
|
134
195
|
}, Intersection> ? Intersection : {
|
|
135
196
|
[Key in keyof Intersection]: $mol_type_merge<Intersection[Key]>;
|
|
136
197
|
} : Intersection : Intersection;
|
|
198
|
+
/**
|
|
199
|
+
* Flat converts intersection of records to record of intersections
|
|
200
|
+
*
|
|
201
|
+
* // { a: 1, b: 2 }
|
|
202
|
+
* $mol_type_merge< { a: 1 } & { b: 2 } >
|
|
203
|
+
*/
|
|
137
204
|
type $mol_type_merge_object<Intersection> = {
|
|
138
205
|
[Key in keyof Intersection]: Intersection[Key];
|
|
139
206
|
};
|
|
140
207
|
}
|
|
141
208
|
|
|
142
209
|
declare namespace $ {
|
|
210
|
+
/**
|
|
211
|
+
* Omit keys from `Input` which values extends `Upper`.
|
|
212
|
+
*
|
|
213
|
+
* type MathConstants = $mol_type_omit< Math , Function > // { E , PI , ... }
|
|
214
|
+
*/
|
|
143
215
|
type $mol_type_omit<Input, Upper> = Pick<Input, $mol_type_keys_exclude<Input, Upper>>;
|
|
144
216
|
}
|
|
145
217
|
|
|
146
218
|
declare namespace $ {
|
|
219
|
+
/**
|
|
220
|
+
* Returns type of function param by index.
|
|
221
|
+
*
|
|
222
|
+
* // 888
|
|
223
|
+
* $mol_type_param< ( a : 777 , b : 888 )=> 666 , 1 >
|
|
224
|
+
*/
|
|
147
225
|
type $mol_type_param<Func, Index extends number> = Func extends (...params: infer Params) => any ? Params[Index] : Func extends new (...params: infer Params2) => any ? Params2[Index] : never;
|
|
148
226
|
}
|
|
149
227
|
|
|
150
228
|
declare namespace $ {
|
|
229
|
+
/**
|
|
230
|
+
* Recursive `Partial`.
|
|
231
|
+
*
|
|
232
|
+
* let props : $mol_type_partial_deep< HTMLElement > = { style : { display : 'block' } }
|
|
233
|
+
*/
|
|
151
234
|
type $mol_type_partial_deep<Val> = Val extends object ? Val extends Function ? Val : {
|
|
152
235
|
[field in keyof Val]?: $mol_type_partial_deep<Val[field]> | undefined;
|
|
153
236
|
} : Val;
|
|
@@ -158,24 +241,53 @@ declare namespace $ {
|
|
|
158
241
|
}
|
|
159
242
|
|
|
160
243
|
declare namespace $ {
|
|
244
|
+
/**
|
|
245
|
+
* Fields that can be set to undefined makes optional
|
|
246
|
+
*
|
|
247
|
+
* type User = $mol_type_partial_undefined<{ name : string , age : number | undefined }> // { name : string , age? : number | undefined }
|
|
248
|
+
*/
|
|
161
249
|
type $mol_type_partial_undefined<Val> = $mol_type_merge<$mol_type_override<Partial<Val>, Pick<Val, {
|
|
162
250
|
[Field in keyof Val]: undefined extends Val[Field] ? never : Field;
|
|
163
251
|
}[keyof Val]>>>;
|
|
164
252
|
}
|
|
165
253
|
|
|
166
254
|
declare namespace $ {
|
|
255
|
+
/**
|
|
256
|
+
* Picks keys from `Input` which values extends `Upper`.
|
|
257
|
+
*
|
|
258
|
+
* type MathConstants = $mol_type_pick< Math , number > // { E , PI , ... }
|
|
259
|
+
*/
|
|
167
260
|
type $mol_type_pick<Input, Upper> = Pick<Input, $mol_type_keys_extract<Input, Upper>>;
|
|
168
261
|
}
|
|
169
262
|
|
|
170
263
|
declare namespace $ {
|
|
264
|
+
/**
|
|
265
|
+
* Returns `Tuple` unshifted by `Item`.
|
|
266
|
+
*
|
|
267
|
+
* $mol_type_tail< 1 , [ 2 , 3 ] > // [ 1 , 2 , 3 ]
|
|
268
|
+
*/
|
|
171
269
|
type $mol_type_prepend<Item extends any, Tuple extends readonly any[]> = ((head: Item, ...args: Tuple) => any) extends ((...args: infer Result) => any) ? Result : never;
|
|
172
270
|
}
|
|
173
271
|
|
|
174
272
|
declare namespace $ {
|
|
273
|
+
/**
|
|
274
|
+
* Returns type of function result or class instance.
|
|
275
|
+
*
|
|
276
|
+
* // 777
|
|
277
|
+
* $mol_type_result< ()=> 777 >
|
|
278
|
+
*
|
|
279
|
+
* // 777
|
|
280
|
+
* $mol_type_result< new()=> 777 >
|
|
281
|
+
*/
|
|
175
282
|
type $mol_type_result<Func> = Func extends (...params: any) => infer Result ? Result : Func extends new (...params: any) => infer Result ? Result : never;
|
|
176
283
|
}
|
|
177
284
|
|
|
178
285
|
declare namespace $ {
|
|
286
|
+
/**
|
|
287
|
+
* Returns reversed `Tuple`.
|
|
288
|
+
*
|
|
289
|
+
* $mol_type_reverse< [ 1 , 2 ,3 ] > // [ 3 , 2 , 1 ]
|
|
290
|
+
*/
|
|
179
291
|
type $mol_type_reverse<Tuple extends readonly any[], Reversed extends readonly any[] = []> = {
|
|
180
292
|
0: Reversed;
|
|
181
293
|
1: $mol_type_reverse<$mol_type_tail<Tuple>, $mol_type_prepend<$mol_type_head<Tuple>, Reversed>>;
|
|
@@ -183,6 +295,7 @@ declare namespace $ {
|
|
|
183
295
|
}
|
|
184
296
|
|
|
185
297
|
declare namespace $ {
|
|
298
|
+
/** Any unary function **/
|
|
186
299
|
type $mol_type_unary_func = ((param: any) => any);
|
|
187
300
|
type $mol_type_unary_class = new (param: any) => any;
|
|
188
301
|
type $mol_type_unary = $mol_type_unary_func | $mol_type_unary_class;
|
package/web.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../mam.d.ts","../../equals/equals.d.ts","../../error/error.d.ts","../../assert/assert.d.ts","../../tail/tail.d.ts","../../append/append.d.ts","../../head/head.d.ts","../../int/int.d.ts","../../intersect/intersect.d.ts","../../keys/extract/extract.d.ts","../../keys/exclude/exclude.d.ts","../../merge/merge.d.ts","../../omit/omit.d.ts","../../param/param.d.ts","../../partial/deep/deep.d.ts","../../override/override.d.ts","../../partial/undefined/undefined.d.ts","../../pick/pick.d.ts","../../prepend/prepend.d.ts","../../result/result.d.ts","../../reverse/reverse.d.ts","../../unary/unary.d.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACfA;AACA;AACA;AACA;
|
|
1
|
+
{"version":3,"sources":["../../../../mam.d.ts","../../equals/equals.d.ts","../../error/error.d.ts","../../assert/assert.d.ts","../../tail/tail.d.ts","../../append/append.d.ts","../../head/head.d.ts","../../int/int.d.ts","../../intersect/intersect.d.ts","../../keys/extract/extract.d.ts","../../keys/exclude/exclude.d.ts","../../merge/merge.d.ts","../../omit/omit.d.ts","../../param/param.d.ts","../../partial/deep/deep.d.ts","../../override/override.d.ts","../../partial/undefined/undefined.d.ts","../../pick/pick.d.ts","../../prepend/prepend.d.ts","../../result/result.d.ts","../../reverse/reverse.d.ts","../../unary/unary.d.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACTA;AACA;AACA;AACA;AACA;AACA;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACVA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACXA;AACA;AACA;AACA;AACA;AACA;AACA","sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]}
|