1 | import { Pos } from '../Iteration/Pos';
|
2 | import { Concat } from '../List/Concat';
|
3 | import { Length } from '../List/Length';
|
4 | import { Next } from '../Iteration/Next';
|
5 | import { Cast } from '../Any/Cast';
|
6 | import { Parameters } from './Parameters';
|
7 | import { Return } from './Return';
|
8 | import { IterationOf } from '../Iteration/IterationOf';
|
9 | import { Iteration } from '../Iteration/Iteration';
|
10 | import { NonNullableFlat } from '../Object/NonNullable';
|
11 | import { x } from '../Any/x';
|
12 | import { List } from '../List/List';
|
13 | import { Function } from './Function';
|
14 | import { Extends } from '../Any/Extends';
|
15 | import { Tail } from '../List/Tail';
|
16 | import { RequiredKeys } from '../List/RequiredKeys';
|
17 |
|
18 |
|
19 |
|
20 | declare type _SplitParams<P extends List, PSplit extends List[] = [], PRest extends List = Tail<P>> = {
|
21 | 0: P extends [...infer A, ...PRest] ? _SplitParams<Tail<P>, [...PSplit, A], Tail<PRest>> : never;
|
22 | 1: PSplit;
|
23 | 2: P[number][][];
|
24 | }[number extends Length<P> ? 2 : P extends [] ? 1 : 0];
|
25 |
|
26 |
|
27 |
|
28 |
|
29 | declare type SplitParams<P extends List> = _SplitParams<P> extends infer X ? Cast<X, List[]> : never;
|
30 |
|
31 |
|
32 |
|
33 | declare type _JoinParams<PSplit extends List[], L extends List = []> = {
|
34 | 0: _JoinParams<Tail<PSplit>, [...L, ...PSplit[0]]>;
|
35 | 1: L;
|
36 | 2: PSplit[number][];
|
37 | }[number extends Length<PSplit> ? 2 : PSplit extends [] ? 1 : 0];
|
38 |
|
39 |
|
40 |
|
41 |
|
42 | declare type JoinParams<P extends List[]> = _JoinParams<P> extends infer X ? Cast<X, List> : never;
|
43 |
|
44 |
|
45 |
|
46 | declare type GapOf<L1 extends List, L2 extends List[], LN extends List, I extends Iteration> = L1[Pos<I>] extends x ? Concat<LN, L2[Pos<I>]> : LN;
|
47 |
|
48 |
|
49 |
|
50 | declare type _GapsOf<L1 extends List, L2 extends List[], LN extends List = [], L2D extends List[] = L2, I extends Iteration = IterationOf<0>> = {
|
51 | 0: _GapsOf<L1, L2, GapOf<L1, L2, LN, I>, Tail<L2D>, Next<I>>;
|
52 | 1: Concat<LN, JoinParams<L2D>>;
|
53 | }[Extends<Pos<I>, Length<L1>>];
|
54 |
|
55 |
|
56 |
|
57 | declare type GapsOf<L1 extends List, L2 extends List> = _GapsOf<L1, SplitParams<L2>> extends infer X ? Cast<X, List> : never;
|
58 |
|
59 |
|
60 |
|
61 | declare type Gaps<L extends List> = Cast<NonNullableFlat<{
|
62 | [K in keyof L]?: L[K] | x;
|
63 | }>, List>;
|
64 |
|
65 |
|
66 |
|
67 |
|
68 |
|
69 |
|
70 |
|
71 |
|
72 |
|
73 |
|
74 |
|
75 |
|
76 |
|
77 | export declare type Curry<F extends Function> = <P extends Gaps<Parameters<F>>, G extends List = GapsOf<P, Parameters<F>>, R extends any = Return<F>>(...p: Gaps<Parameters<F>> | P) => RequiredKeys<G> extends never ? R : Curry<(...p: G) => R>;
|
78 | export {};
|