mol_type_all 0.0.1827 → 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 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;ACHA;AACA;AACA;AACA;AACA;AACA;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACPA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;ACHA;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;ACnEA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACPA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACVA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;AACA;AACA;ACLA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;AACA;AACA;ACLA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;ACNA;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]}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mol_type_all",
3
- "version": "0.0.1827",
3
+ "version": "0.0.1828",
4
4
  "exports": {
5
5
  "node": {
6
6
  "import": "./node.mjs",
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;ACHA;AACA;AACA;AACA;AACA;AACA;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACPA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;ACHA;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;ACnEA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACPA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACVA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;AACA;AACA;ACLA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;AACA;AACA;ACLA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;ACNA;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]}
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]}