@fncts/typelevel 0.0.13 → 0.0.14

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/Any.d.ts CHANGED
@@ -2,14 +2,14 @@ import type { Boolean, False, True } from "./Boolean.js";
2
2
  import type { BuiltIn } from "./BuiltIn.js";
3
3
  import type { List } from "./List.js";
4
4
  import type { Has } from "./Union.js";
5
- export declare type Cast<A, B> = A extends B ? A : B;
6
- export declare type Try<A1, A2, Catch = never> = A1 extends A2 ? A1 : Catch;
7
- export declare type Extends<A, B> = [A] extends [never] ? False : A extends B ? True : False;
8
- export declare type Contains<A, B> = Extends<A, B> extends True ? True : False;
9
- export declare type Equals<A, B> = (<X>() => X extends B ? True : False) extends <X>() => X extends A ? True : False ? True : False;
10
- export declare type If<B extends Boolean, Then, Else = never> = B extends True ? Then : Else;
11
- export declare type Match = "default" | "extends->" | "contains->" | "equals" | "<-extends" | "<-contains";
12
- export declare type Is<A, B, _ extends Match> = {
5
+ export type Cast<A, B> = A extends B ? A : B;
6
+ export type Try<A1, A2, Catch = never> = A1 extends A2 ? A1 : Catch;
7
+ export type Extends<A, B> = [A] extends [never] ? False : A extends B ? True : False;
8
+ export type Contains<A, B> = Extends<A, B> extends True ? True : False;
9
+ export type Equals<A, B> = (<X>() => X extends B ? True : False) extends <X>() => X extends A ? True : False ? True : False;
10
+ export type If<B extends Boolean, Then, Else = never> = B extends True ? Then : Else;
11
+ export type Match = "default" | "extends->" | "contains->" | "equals" | "<-extends" | "<-contains";
12
+ export type Is<A, B, _ extends Match> = {
13
13
  default: Extends<A, B>;
14
14
  "extends->": Extends<A, B>;
15
15
  "contains->": Contains<A, B>;
@@ -17,25 +17,25 @@ export declare type Is<A, B, _ extends Match> = {
17
17
  "<-contains": Contains<B, A>;
18
18
  equals: Equals<A, B>;
19
19
  }[_];
20
- export declare type Key = string | number | symbol;
21
- export declare type Literal = string | number | bigint | boolean;
22
- export declare type Keys<A> = A extends List ? Exclude<keyof A, keyof any[]> | number : keyof A;
23
- export declare type KnownKeys<A> = {
20
+ export type Key = string | number | symbol;
21
+ export type Literal = string | number | bigint | boolean;
22
+ export type Keys<A> = A extends List ? Exclude<keyof A, keyof any[]> | number : keyof A;
23
+ export type KnownKeys<A> = {
24
24
  [K in keyof A]: string extends K ? never : number extends K ? never : K;
25
25
  } extends {
26
26
  [K in keyof A]: infer U;
27
27
  } ? U & Keys<A> : never;
28
- export declare type ComputeRaw<A> = A extends Function ? A : {
28
+ export type ComputeRaw<A> = A extends Function ? A : {
29
29
  [K in keyof A]: A[K];
30
30
  } & unknown;
31
- export declare type ComputeFlat<A> = A extends BuiltIn ? A : A extends Array<any> ? A extends Array<Record<Key, any>> ? Array<{
31
+ export type ComputeFlat<A> = A extends BuiltIn ? A : A extends Array<any> ? A extends Array<Record<Key, any>> ? Array<{
32
32
  [K in keyof A[number]]: A[number][K];
33
33
  } & unknown> : A : A extends ReadonlyArray<any> ? A extends ReadonlyArray<Record<Key, any>> ? ReadonlyArray<{
34
34
  [K in keyof A[number]]: A[number][K];
35
35
  } & unknown> : A : {
36
36
  [K in keyof A]: A[K];
37
37
  } & unknown;
38
- export declare type ComputeDeep<A, Seen = never> = A extends BuiltIn ? A : {
38
+ export type ComputeDeep<A, Seen = never> = A extends BuiltIn ? A : {
39
39
  [False]: A extends Array<any> ? A extends Array<Record<Key, any>> ? Array<{
40
40
  [K in keyof A[number]]: ComputeDeep<A[number][K], A | Seen>;
41
41
  } & unknown> : A : A extends ReadonlyArray<any> ? A extends ReadonlyArray<Record<Key, any>> ? ReadonlyArray<{
@@ -45,4 +45,4 @@ export declare type ComputeDeep<A, Seen = never> = A extends BuiltIn ? A : {
45
45
  } & unknown;
46
46
  [True]: A;
47
47
  }[Has<Seen, A>];
48
- export declare type At<A, K extends Key> = A extends List ? number extends A["length"] ? K extends number | `${number}` ? A[never] | undefined : undefined : K extends keyof A ? A[K] : undefined : unknown extends A ? unknown : K extends keyof A ? A[K] : undefined;
48
+ export type At<A, K extends Key> = A extends List ? number extends A["length"] ? K extends number | `${number}` ? A[never] | undefined : undefined : K extends keyof A ? A[K] : undefined : unknown extends A ? unknown : K extends keyof A ? A[K] : undefined;
package/Boolean.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  export declare const False: unique symbol;
2
2
  export declare const True: unique symbol;
3
- export declare type False = typeof False;
4
- export declare type True = typeof True;
5
- export declare type Boolean = True | False;
6
- export declare type Or<B1 extends Boolean, B2 extends Boolean> = {
3
+ export type False = typeof False;
4
+ export type True = typeof True;
5
+ export type Boolean = True | False;
6
+ export type Or<B1 extends Boolean, B2 extends Boolean> = {
7
7
  [False]: {
8
8
  [False]: False;
9
9
  [True]: True;
@@ -13,7 +13,7 @@ export declare type Or<B1 extends Boolean, B2 extends Boolean> = {
13
13
  [True]: True;
14
14
  };
15
15
  }[B1][B2];
16
- export declare type And<B1 extends Boolean, B2 extends Boolean> = {
16
+ export type And<B1 extends Boolean, B2 extends Boolean> = {
17
17
  [False]: {
18
18
  [False]: False;
19
19
  [True]: False;
@@ -23,7 +23,7 @@ export declare type And<B1 extends Boolean, B2 extends Boolean> = {
23
23
  [True]: True;
24
24
  };
25
25
  }[B1][B2];
26
- export declare type Xor<B1 extends Boolean, B2 extends Boolean> = {
26
+ export type Xor<B1 extends Boolean, B2 extends Boolean> = {
27
27
  [False]: {
28
28
  [False]: False;
29
29
  [True]: True;
@@ -33,7 +33,7 @@ export declare type Xor<B1 extends Boolean, B2 extends Boolean> = {
33
33
  [True]: False;
34
34
  };
35
35
  }[B1][B2];
36
- export declare type Not<B extends Boolean> = {
36
+ export type Not<B extends Boolean> = {
37
37
  [False]: True;
38
38
  [True]: False;
39
39
  }[B];
package/BuiltIn.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export declare type BuiltIn = Function | Error | Date | {
1
+ export type BuiltIn = Function | Error | Date | {
2
2
  readonly [Symbol.toStringTag]: string;
3
3
  } | RegExp | Generator;
package/Check.d.ts CHANGED
@@ -1,12 +1,12 @@
1
1
  import type { False, True } from "./Boolean.js";
2
2
  import type * as Union from "./Union.js";
3
- declare type EqualsWrapped<T> = T extends infer R & {} ? {
3
+ type EqualsWrapped<T> = T extends infer R & {} ? {
4
4
  [P in keyof R]: R[P];
5
5
  } : never;
6
6
  /**
7
7
  * @tsplus type fncts.Check
8
8
  */
9
- export declare type Check<Condition> = [Condition] extends [never] ? Check.False : Check.True;
9
+ export type Check<Condition> = [Condition] extends [never] ? Check.False : Check.True;
10
10
  export declare namespace Check {
11
11
  /**
12
12
  * @tsplus type fncts.Check.True
package/Function.d.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  import type { Try } from "@fncts/typelevel/Any";
2
- export declare type Narrowable = string | number | boolean | bigint;
3
- export declare type Exact<A, B> = B extends unknown ? A extends B ? A extends Narrowable ? A : {
2
+ export type Narrowable = string | number | boolean | bigint;
3
+ export type Exact<A, B> = B extends unknown ? A extends B ? A extends Narrowable ? A : {
4
4
  [K in keyof A]: K extends keyof B ? Exact<A[K], B[K]> : never;
5
5
  } : B : never;
6
- export declare type NoInfer<A> = [A][A extends any ? 0 : never];
7
- declare type NarrowRaw<A> = (A extends [] ? [] : never) | (A extends Narrowable ? A : never) | {
6
+ export type NoInfer<A> = [A][A extends any ? 0 : never];
7
+ type NarrowRaw<A> = (A extends [] ? [] : never) | (A extends Narrowable ? A : never) | {
8
8
  [K in keyof A]: A[K] extends Function ? A[K] : NarrowRaw<A[K]>;
9
9
  };
10
- export declare type Narrow<A> = Try<A, [], NarrowRaw<A>>;
10
+ export type Narrow<A> = Try<A, [], NarrowRaw<A>>;
11
11
  export {};
package/Intersection.d.ts CHANGED
@@ -1 +1 @@
1
- export declare type Erase<A, B> = A & B extends B & infer C ? C : A;
1
+ export type Erase<A, B> = A & B extends B & infer C ? C : A;
package/Iteration.d.ts CHANGED
@@ -1,11 +1,11 @@
1
- export declare type Iteration = [
1
+ export type Iteration = [
2
2
  value: number,
3
3
  sign: "-" | "0" | "+",
4
4
  prev: keyof IterationMap,
5
5
  next: keyof IterationMap,
6
6
  oppo: keyof IterationMap
7
7
  ];
8
- export declare type IterationMap = {
8
+ export type IterationMap = {
9
9
  __: [number, "-" | "0" | "+", "__", "__", "__"];
10
10
  "-100": [-100, "-", "__", "-99", "100"];
11
11
  "-99": [-99, "-", "-100", "-98", "99"];
@@ -209,8 +209,8 @@ export declare type IterationMap = {
209
209
  "99": [99, "+", "98", "100", "-99"];
210
210
  "100": [100, "+", "99", "__", "-100"];
211
211
  };
212
- export declare type IterationOf<N extends number> = `${N}` extends keyof IterationMap ? IterationMap[`${N}`] : IterationMap["__"];
213
- export declare type Next<I extends Iteration> = IterationMap[I[3]];
214
- export declare type Prev<I extends Iteration> = IterationMap[I[2]];
215
- export declare type Pos<I extends Iteration> = I[0];
216
- export declare type Key<I extends Iteration> = `${Pos<I>}`;
212
+ export type IterationOf<N extends number> = `${N}` extends keyof IterationMap ? IterationMap[`${N}`] : IterationMap["__"];
213
+ export type Next<I extends Iteration> = IterationMap[I[3]];
214
+ export type Prev<I extends Iteration> = IterationMap[I[2]];
215
+ export type Pos<I extends Iteration> = I[0];
216
+ export type Key<I extends Iteration> = `${Pos<I>}`;
package/List.d.ts CHANGED
@@ -1,15 +1,15 @@
1
1
  import type * as O from "./Object.js";
2
- export declare type List<A = any> = ReadonlyArray<A>;
3
- export declare type Prepend<L extends List, A> = [A, ...L];
4
- export declare type Append<L extends List, A> = [...L, A];
5
- export declare type Concat<L1 extends List, L2 extends List> = [...L1, ...L2];
6
- export declare type Length<L extends List> = L["length"];
7
- export declare type Head<L extends List> = L[0];
8
- export declare type Tail<L extends List> = L extends readonly [] ? L : L extends readonly [any?, ...infer Tail] ? Tail : L;
9
- export declare type Init<L extends List> = L extends readonly [] ? L : L extends readonly [...infer Init, any?] ? Init : L;
10
- export declare type Last<L extends List> = L[Length<Tail<L>>];
11
- export declare type UnionOf<L extends List> = L[number];
12
- export declare type PrependAll<L extends List, A, O extends List = []> = Length<L> extends 0 ? O : PrependAll<Tail<L>, A, [...O, A, Head<L>]>;
13
- export declare type Pop<L extends List> = L extends readonly [...infer LBody, any] | readonly [...infer LBody, any?] ? LBody : L;
14
- export declare type ObjectOf<L extends List> = L extends unknown ? number extends Length<L> ? O._Pick<L, number> : O._Omit<L, keyof any[]> : never;
15
- export declare type RequiredKeys<L extends List> = O.RequiredKeys<ObjectOf<L>>;
2
+ export type List<A = any> = ReadonlyArray<A>;
3
+ export type Prepend<L extends List, A> = [A, ...L];
4
+ export type Append<L extends List, A> = [...L, A];
5
+ export type Concat<L1 extends List, L2 extends List> = [...L1, ...L2];
6
+ export type Length<L extends List> = L["length"];
7
+ export type Head<L extends List> = L[0];
8
+ export type Tail<L extends List> = L extends readonly [] ? L : L extends readonly [any?, ...infer Tail] ? Tail : L;
9
+ export type Init<L extends List> = L extends readonly [] ? L : L extends readonly [...infer Init, any?] ? Init : L;
10
+ export type Last<L extends List> = L[Length<Tail<L>>];
11
+ export type UnionOf<L extends List> = L[number];
12
+ export type PrependAll<L extends List, A, O extends List = []> = Length<L> extends 0 ? O : PrependAll<Tail<L>, A, [...O, A, Head<L>]>;
13
+ export type Pop<L extends List> = L extends readonly [...infer LBody, any] | readonly [...infer LBody, any?] ? LBody : L;
14
+ export type ObjectOf<L extends List> = L extends unknown ? number extends Length<L> ? O._Pick<L, number> : O._Omit<L, keyof any[]> : never;
15
+ export type RequiredKeys<L extends List> = O.RequiredKeys<ObjectOf<L>>;
package/Number.d.ts CHANGED
@@ -1,56 +1,56 @@
1
1
  import type { Cast, Equals } from "./Any.js";
2
2
  import type { False, Or, True } from "./Boolean.js";
3
3
  import type { Iteration, IterationMap, IterationOf, Next, Pos, Prev } from "./Iteration.js";
4
- export declare type _IsNegative<N extends Iteration> = {
4
+ export type _IsNegative<N extends Iteration> = {
5
5
  "-": True;
6
6
  "+": False;
7
7
  "0": False;
8
8
  }[N[1]];
9
- export declare type IsNegative<N extends number> = _IsNegative<IterationOf<N>>;
10
- export declare type _IsPositive<N extends Iteration> = {
9
+ export type IsNegative<N extends number> = _IsNegative<IterationOf<N>>;
10
+ export type _IsPositive<N extends Iteration> = {
11
11
  "-": False;
12
12
  "+": True;
13
13
  "0": False;
14
14
  }[N[1]];
15
- export declare type IsPositive<N extends number> = _IsPositive<IterationOf<N>>;
16
- export declare type _IsZero<N extends Iteration> = {
15
+ export type IsPositive<N extends number> = _IsPositive<IterationOf<N>>;
16
+ export type _IsZero<N extends Iteration> = {
17
17
  "-": False;
18
18
  "+": False;
19
19
  "0": True;
20
20
  }[N[1]];
21
- export declare type IsZero<N extends number> = _IsZero<IterationOf<N>>;
22
- export declare type _Negate<N extends Iteration> = IterationMap[N[4]];
23
- export declare type Negate<N extends number> = N extends unknown ? _Negate<IterationOf<N>>[0] : never;
24
- export declare type _AddPositive<N1 extends Iteration, N2 extends Iteration> = Pos<N2> extends 0 ? N1 : number extends Pos<N2> ? IterationOf<number> : _AddPositive<Next<N1>, Prev<N2>>;
25
- export declare type AddPositive<N1 extends Iteration, N2 extends Iteration> = _AddPositive<N1, N2> extends infer X ? Cast<X, Iteration> : never;
26
- export declare type _AddNegative<N1 extends Iteration, N2 extends Iteration> = Pos<N2> extends 0 ? N1 : number extends Pos<N2> ? IterationOf<number> : _AddNegative<Prev<N1>, Next<N2>>;
27
- export declare type AddNegative<N1 extends Iteration, N2 extends Iteration> = _AddNegative<N1, N2> extends infer X ? Cast<X, Iteration> : never;
28
- export declare type _Add<N1 extends Iteration, N2 extends Iteration> = {
21
+ export type IsZero<N extends number> = _IsZero<IterationOf<N>>;
22
+ export type _Negate<N extends Iteration> = IterationMap[N[4]];
23
+ export type Negate<N extends number> = N extends unknown ? _Negate<IterationOf<N>>[0] : never;
24
+ export type _AddPositive<N1 extends Iteration, N2 extends Iteration> = Pos<N2> extends 0 ? N1 : number extends Pos<N2> ? IterationOf<number> : _AddPositive<Next<N1>, Prev<N2>>;
25
+ export type AddPositive<N1 extends Iteration, N2 extends Iteration> = _AddPositive<N1, N2> extends infer X ? Cast<X, Iteration> : never;
26
+ export type _AddNegative<N1 extends Iteration, N2 extends Iteration> = Pos<N2> extends 0 ? N1 : number extends Pos<N2> ? IterationOf<number> : _AddNegative<Prev<N1>, Next<N2>>;
27
+ export type AddNegative<N1 extends Iteration, N2 extends Iteration> = _AddNegative<N1, N2> extends infer X ? Cast<X, Iteration> : never;
28
+ export type _Add<N1 extends Iteration, N2 extends Iteration> = {
29
29
  [False]: AddPositive<N1, N2>;
30
30
  [True]: AddNegative<N1, N2>;
31
31
  }[_IsNegative<N2>];
32
- export declare type Add<N1 extends number, N2 extends number> = N1 extends unknown ? N2 extends unknown ? _Add<IterationOf<N1>, IterationOf<N2>>[0] : never : never;
33
- export declare type _Sub<N1 extends Iteration, N2 extends Iteration> = _Add<N1, _Negate<N2>>;
34
- export declare type Sub<N1 extends number, N2 extends number> = N1 extends unknown ? N2 extends unknown ? _Add<IterationOf<N1>, _Negate<IterationOf<N2>>>[0] : never : never;
35
- export declare type _Absolute<N extends Iteration> = {
32
+ export type Add<N1 extends number, N2 extends number> = N1 extends unknown ? N2 extends unknown ? _Add<IterationOf<N1>, IterationOf<N2>>[0] : never : never;
33
+ export type _Sub<N1 extends Iteration, N2 extends Iteration> = _Add<N1, _Negate<N2>>;
34
+ export type Sub<N1 extends number, N2 extends number> = N1 extends unknown ? N2 extends unknown ? _Add<IterationOf<N1>, _Negate<IterationOf<N2>>>[0] : never : never;
35
+ export type _Absolute<N extends Iteration> = {
36
36
  [False]: N;
37
37
  [True]: _Negate<N>;
38
38
  }[_IsNegative<N>];
39
- export declare type Absolute<N extends number> = N extends unknown ? _Absolute<IterationOf<N>> : never;
40
- export declare type _Greater<N1 extends Iteration, N2 extends Iteration> = _IsPositive<_Sub<N1, N2>>;
41
- export declare type Greater<X extends number, Y extends number> = X extends unknown ? Y extends unknown ? _Greater<IterationOf<X>, IterationOf<Y>> : never : never;
42
- export declare type _Lower<N1 extends Iteration, N2 extends Iteration> = _Greater<N2, N1>;
43
- export declare type Lower<X extends number, Y extends number> = X extends unknown ? Y extends unknown ? _Lower<IterationOf<X>, IterationOf<Y>> : never : never;
44
- export declare type _GreaterEq<N1 extends Iteration, N2 extends Iteration> = Or<Equals<N1, N2>, _Greater<N1, N2>>;
45
- export declare type GreaterEq<X extends number, Y extends number> = X extends unknown ? Y extends unknown ? _GreaterEq<IterationOf<X>, IterationOf<Y>> : never : never;
46
- export declare type _LowerEq<N1 extends Iteration, N2 extends Iteration> = Or<Equals<N1, N2>, _Lower<N1, N2>>;
47
- export declare type LowerEq<X extends number, Y extends number> = X extends unknown ? Y extends unknown ? _LowerEq<IterationOf<X>, IterationOf<Y>> : never : never;
48
- export declare type Comparison = "<" | ">" | "<=" | ">=" | "==";
49
- export declare type _Comp<N1 extends Iteration, C extends Comparison, N2 extends Iteration> = {
39
+ export type Absolute<N extends number> = N extends unknown ? _Absolute<IterationOf<N>> : never;
40
+ export type _Greater<N1 extends Iteration, N2 extends Iteration> = _IsPositive<_Sub<N1, N2>>;
41
+ export type Greater<X extends number, Y extends number> = X extends unknown ? Y extends unknown ? _Greater<IterationOf<X>, IterationOf<Y>> : never : never;
42
+ export type _Lower<N1 extends Iteration, N2 extends Iteration> = _Greater<N2, N1>;
43
+ export type Lower<X extends number, Y extends number> = X extends unknown ? Y extends unknown ? _Lower<IterationOf<X>, IterationOf<Y>> : never : never;
44
+ export type _GreaterEq<N1 extends Iteration, N2 extends Iteration> = Or<Equals<N1, N2>, _Greater<N1, N2>>;
45
+ export type GreaterEq<X extends number, Y extends number> = X extends unknown ? Y extends unknown ? _GreaterEq<IterationOf<X>, IterationOf<Y>> : never : never;
46
+ export type _LowerEq<N1 extends Iteration, N2 extends Iteration> = Or<Equals<N1, N2>, _Lower<N1, N2>>;
47
+ export type LowerEq<X extends number, Y extends number> = X extends unknown ? Y extends unknown ? _LowerEq<IterationOf<X>, IterationOf<Y>> : never : never;
48
+ export type Comparison = "<" | ">" | "<=" | ">=" | "==";
49
+ export type _Comp<N1 extends Iteration, C extends Comparison, N2 extends Iteration> = {
50
50
  "<": _Lower<N1, N2>;
51
51
  ">": _Greater<N1, N2>;
52
52
  "<=": _LowerEq<N1, N2>;
53
53
  ">=": _GreaterEq<N1, N2>;
54
54
  "==": Equals<N1, N2>;
55
55
  }[C];
56
- export declare type Comp<X extends number, C extends Comparison, Y extends number> = X extends unknown ? Y extends unknown ? _Comp<IterationOf<X>, C, IterationOf<Y>> : never : never;
56
+ export type Comp<X extends number, C extends Comparison, Y extends number> = X extends unknown ? Y extends unknown ? _Comp<IterationOf<X>, C, IterationOf<Y>> : never : never;
package/Object.d.ts CHANGED
@@ -4,59 +4,59 @@ import type { BuiltIn } from "./BuiltIn.js";
4
4
  import type { Iteration, IterationOf, Next, Pos } from "./Iteration.js";
5
5
  import type { Append, Head, Length, List, Pop, PrependAll, Tail } from "./List.js";
6
6
  import type * as U from "./Union.js";
7
- export declare type _Path<O, P extends List<Key>, I extends Iteration = IterationOf<0>> = {
7
+ export type _Path<O, P extends List<Key>, I extends Iteration = IterationOf<0>> = {
8
8
  [False]: _Path<At<O, P[Pos<I>]>, P, Next<I>>;
9
9
  [True]: O;
10
10
  }[Extends<Pos<I>, Length<P>>];
11
- export declare type Path<O, P extends List<Key>> = _Path<O & {}, P> extends infer X ? Cast<X, any> : never;
12
- declare type Index = number | string;
13
- declare type KeyToIndex<K extends Key, SP extends List<Index>> = number extends K ? Head<SP> : K & Index;
11
+ export type Path<O, P extends List<Key>> = _Path<O & {}, P> extends infer X ? Cast<X, any> : never;
12
+ type Index = number | string;
13
+ type KeyToIndex<K extends Key, SP extends List<Index>> = number extends K ? Head<SP> : K & Index;
14
14
  declare const __Cont: unique symbol;
15
- declare type __Cont = typeof __Cont;
15
+ type __Cont = typeof __Cont;
16
16
  declare const __Path: unique symbol;
17
- declare type __Path = typeof __Path;
18
- declare type _MetaPath<O, SP extends List<Index> = [], P extends List<Index> = []> = {
17
+ type __Path = typeof __Path;
18
+ type _MetaPath<O, SP extends List<Index> = [], P extends List<Index> = []> = {
19
19
  [K in keyof O]: {
20
20
  [__Cont]: _MetaPath<O[K], Tail<SP>, Append<P, KeyToIndex<K, SP>>>;
21
21
  [__Path]: Append<P, KeyToIndex<K, SP>>;
22
22
  };
23
23
  };
24
- declare type MetaPath<O, SP extends List<Index> = [], P extends List<Index> = []> = {
24
+ type MetaPath<O, SP extends List<Index> = [], P extends List<Index> = []> = {
25
25
  [__Cont]: _MetaPath<O, SP, P>;
26
26
  [__Path]: [];
27
27
  };
28
- declare type NextPath<OP> = At<UnionOf<At<OP, __Cont>>, __Path> extends infer X ? (undefined extends X ? never : X) : never;
29
- declare type ExecPath<A, SP extends List<Index>> = NextPath<Path<MetaPath<A, SP>, PrependAll<SP, __Cont>>>;
30
- declare type HintPath<A, SP extends List<Index>, Exec extends List<Index>> = [Exec] extends [never] ? ExecPath<A, Pop<SP>> : Exec | SP;
31
- export declare type AutoPath<A, P extends List<Index>> = HintPath<A, P, ExecPath<A, P>>;
32
- export declare type _UnionOf<O> = O[keyof O];
33
- export declare type UnionOf<O> = O extends unknown ? _UnionOf<O> : never;
34
- export declare type _RequiredKeys<O> = {
28
+ type NextPath<OP> = At<UnionOf<At<OP, __Cont>>, __Path> extends infer X ? (undefined extends X ? never : X) : never;
29
+ type ExecPath<A, SP extends List<Index>> = NextPath<Path<MetaPath<A, SP>, PrependAll<SP, __Cont>>>;
30
+ type HintPath<A, SP extends List<Index>, Exec extends List<Index>> = [Exec] extends [never] ? ExecPath<A, Pop<SP>> : Exec | SP;
31
+ export type AutoPath<A, P extends List<Index>> = HintPath<A, P, ExecPath<A, P>>;
32
+ export type _UnionOf<O> = O[keyof O];
33
+ export type UnionOf<O> = O extends unknown ? _UnionOf<O> : never;
34
+ export type _RequiredKeys<O> = {
35
35
  [K in keyof O]-?: {} extends Pick<O, K> ? never : K;
36
36
  }[keyof O];
37
- export declare type RequiredKeys<O> = O extends unknown ? _RequiredKeys<O> : never;
38
- export declare type _OptionalKeys<O> = {
37
+ export type RequiredKeys<O> = O extends unknown ? _RequiredKeys<O> : never;
38
+ export type _OptionalKeys<O> = {
39
39
  [K in keyof O]-?: {} extends Pick<O, K> ? K : never;
40
40
  }[keyof O];
41
- export declare type OptionalKeys<O> = O extends unknown ? _OptionalKeys<O> : never;
42
- declare type __Pick<O, K extends keyof O> = {
41
+ export type OptionalKeys<O> = O extends unknown ? _OptionalKeys<O> : never;
42
+ type __Pick<O, K extends keyof O> = {
43
43
  [P in K]: O[P];
44
44
  } & {};
45
- export declare type _Pick<O, K extends Key> = __Pick<O, keyof O & K>;
46
- export declare type Pick<O, K extends Key> = O extends unknown ? _Pick<O, K> : never;
47
- export declare type _Omit<O, K extends Key> = _Pick<O, U.Exclude<keyof O, K>>;
48
- export declare type Omit<O, K extends Key> = O extends unknown ? _Omit<O, K> : never;
49
- export declare type Anyify<O> = {
45
+ export type _Pick<O, K extends Key> = __Pick<O, keyof O & K>;
46
+ export type Pick<O, K extends Key> = O extends unknown ? _Pick<O, K> : never;
47
+ export type _Omit<O, K extends Key> = _Pick<O, U.Exclude<keyof O, K>>;
48
+ export type Omit<O, K extends Key> = O extends unknown ? _Omit<O, K> : never;
49
+ export type Anyify<O> = {
50
50
  [K in keyof O]: any;
51
51
  };
52
- export declare type _ExcludeMatch<O, O1, M extends Match> = {
52
+ export type _ExcludeMatch<O, O1, M extends Match> = {
53
53
  [K in keyof O]-?: {
54
54
  [True]: never;
55
55
  [False]: K;
56
56
  }[Is<O[K], At<O1, K>, M>];
57
57
  }[keyof O];
58
- export declare type ExcludeMatch<O, O1, M extends Match> = O extends unknown ? _ExcludeMatch<O, O1, M> : never;
59
- export declare type ExcludeKeys<O, O1, M extends Match = "default"> = {
58
+ export type ExcludeMatch<O, O1, M extends Match> = O extends unknown ? _ExcludeMatch<O, O1, M> : never;
59
+ export type ExcludeKeys<O, O1, M extends Match = "default"> = {
60
60
  default: U.Exclude<Keys<O>, Keys<O1>>;
61
61
  "contains->": ExcludeMatch<O, O1, "contains->">;
62
62
  "extends->": ExcludeMatch<O, O1, "extends->">;
@@ -64,53 +64,53 @@ export declare type ExcludeKeys<O, O1, M extends Match = "default"> = {
64
64
  "<-extends": ExcludeMatch<O, O1, "<-extends">;
65
65
  equals: ExcludeMatch<O, O1, "equals">;
66
66
  }[M];
67
- export declare type Exclude<O, O1, M extends Match> = Pick<O, ExcludeKeys<O, O1, M>>;
68
- declare type Longer<L extends List, L1 extends List> = L extends unknown ? L1 extends unknown ? U.Has<RequiredKeys<L>, RequiredKeys<L1>> : never : never;
69
- declare type MergeProp<OK, O1K, Fill, OOKeys extends Key, K extends Key> = K extends OOKeys ? U.Exclude<OK, undefined> | O1K : [OK] extends [never] ? O1K : OK extends Fill ? O1K : OK;
70
- declare type MergeFlatObject<O, O1, Fill, OOKeys extends Key = OptionalKeys<O>> = {
67
+ export type Exclude<O, O1, M extends Match> = Pick<O, ExcludeKeys<O, O1, M>>;
68
+ type Longer<L extends List, L1 extends List> = L extends unknown ? L1 extends unknown ? U.Has<RequiredKeys<L>, RequiredKeys<L1>> : never : never;
69
+ type MergeProp<OK, O1K, Fill, OOKeys extends Key, K extends Key> = K extends OOKeys ? U.Exclude<OK, undefined> | O1K : [OK] extends [never] ? O1K : OK extends Fill ? O1K : OK;
70
+ type MergeFlatObject<O, O1, Fill, OOKeys extends Key = OptionalKeys<O>> = {
71
71
  [K in keyof (Anyify<O> & O1)]: MergeProp<At<O, K>, At<O1, K>, Fill, OOKeys, K>;
72
72
  } & {};
73
- declare type MergeFlatList<L extends List, L1 extends List, Ignore, Fill, LOK extends Key = _OptionalKeys<L>> = number extends Length<L | L1> ? MergeFlatChoice<L[number], L1[number], Ignore, Fill>[] : Longer<L, L1> extends True ? {
73
+ type MergeFlatList<L extends List, L1 extends List, Ignore, Fill, LOK extends Key = _OptionalKeys<L>> = number extends Length<L | L1> ? MergeFlatChoice<L[number], L1[number], Ignore, Fill>[] : Longer<L, L1> extends True ? {
74
74
  [K in keyof L]: MergeProp<L[K], At<L1, K>, Fill, LOK, K>;
75
75
  } : {
76
76
  [K in keyof L1]: MergeProp<At<L, K>, L1[K], Fill, LOK, K>;
77
77
  };
78
- declare type MergeFlatChoice<O, O1, Ignore, Fill> = O extends Ignore ? O : O1 extends Ignore ? O : O extends List ? O1 extends List ? MergeFlatList<O, O1, Ignore, Fill> : MergeFlatObject<O, O1, Fill> : MergeFlatObject<O, O1, Fill>;
79
- export declare type MergeFlat<O, O1, Ignore = BuiltIn, Fill = undefined> = O extends unknown ? O1 extends unknown ? MergeFlatChoice<O, O1, Ignore, Fill> : never : never;
80
- declare type MergeDeepList<L extends List, L1 extends List, Ignore, Fill> = number extends Length<L | L1> ? MergeDeepChoice<L[number], L1[number], Ignore, Fill, never, any>[] : Longer<L, L1> extends True ? {
78
+ type MergeFlatChoice<O, O1, Ignore, Fill> = O extends Ignore ? O : O1 extends Ignore ? O : O extends List ? O1 extends List ? MergeFlatList<O, O1, Ignore, Fill> : MergeFlatObject<O, O1, Fill> : MergeFlatObject<O, O1, Fill>;
79
+ export type MergeFlat<O, O1, Ignore = BuiltIn, Fill = undefined> = O extends unknown ? O1 extends unknown ? MergeFlatChoice<O, O1, Ignore, Fill> : never : never;
80
+ type MergeDeepList<L extends List, L1 extends List, Ignore, Fill> = number extends Length<L | L1> ? MergeDeepChoice<L[number], L1[number], Ignore, Fill, never, any>[] : Longer<L, L1> extends True ? {
81
81
  [K in keyof L]: MergeDeepChoice<L[K], At<L1, K>, Ignore, Fill, _OptionalKeys<L>, K>;
82
82
  } : {
83
83
  [K in keyof L1]: MergeDeepChoice<At<L, K>, L1[K], Ignore, Fill, _OptionalKeys<L>, K>;
84
84
  };
85
- declare type MergeDeepObject<O, O1, Ignore, Fill, OOKeys extends Key = _OptionalKeys<O>> = {
85
+ type MergeDeepObject<O, O1, Ignore, Fill, OOKeys extends Key = _OptionalKeys<O>> = {
86
86
  [K in keyof (Anyify<O> & O1)]: MergeDeepChoice<At<O, K>, At<O1, K>, Ignore, Fill, OOKeys, K>;
87
87
  };
88
- declare type MergeDeepChoice<OK, O1K, Ignore, Fill, OOKeys extends Key, K extends Key> = [OK] extends [never] ? MergeProp<OK, O1K, Fill, OOKeys, K> : [O1K] extends [never] ? MergeProp<OK, O1K, Fill, OOKeys, K> : OK extends Ignore ? MergeProp<OK, O1K, Fill, OOKeys, K> : O1K extends Ignore ? MergeProp<OK, O1K, Fill, OOKeys, K> : OK extends List ? O1K extends List ? MergeDeepList<OK, O1K, Ignore, Fill> : MergeProp<OK, O1K, Fill, OOKeys, K> : OK extends object ? O1K extends object ? MergeDeepObject<OK, O1K, Ignore, Fill> : MergeProp<OK, O1K, Fill, OOKeys, K> : MergeProp<OK, O1K, Fill, OOKeys, K>;
89
- export declare type MergeDeep<O, O1, Ignore, Fill> = O extends unknown ? O1 extends unknown ? MergeDeepChoice<O, O1, Ignore, Fill, "x", "y"> : never : never;
90
- declare type PatchProp<OK, O1K, Fill, OKeys extends Key, K extends Key> = K extends OKeys ? (OK extends Fill ? O1K : OK) : O1K;
88
+ type MergeDeepChoice<OK, O1K, Ignore, Fill, OOKeys extends Key, K extends Key> = [OK] extends [never] ? MergeProp<OK, O1K, Fill, OOKeys, K> : [O1K] extends [never] ? MergeProp<OK, O1K, Fill, OOKeys, K> : OK extends Ignore ? MergeProp<OK, O1K, Fill, OOKeys, K> : O1K extends Ignore ? MergeProp<OK, O1K, Fill, OOKeys, K> : OK extends List ? O1K extends List ? MergeDeepList<OK, O1K, Ignore, Fill> : MergeProp<OK, O1K, Fill, OOKeys, K> : OK extends object ? O1K extends object ? MergeDeepObject<OK, O1K, Ignore, Fill> : MergeProp<OK, O1K, Fill, OOKeys, K> : MergeProp<OK, O1K, Fill, OOKeys, K>;
89
+ export type MergeDeep<O, O1, Ignore, Fill> = O extends unknown ? O1 extends unknown ? MergeDeepChoice<O, O1, Ignore, Fill, "x", "y"> : never : never;
90
+ type PatchProp<OK, O1K, Fill, OKeys extends Key, K extends Key> = K extends OKeys ? (OK extends Fill ? O1K : OK) : O1K;
91
91
  /**
92
92
  * @hidden
93
93
  */
94
- declare type PatchFlatObject<O, O1, Fill, OKeys extends Key = keyof O> = {
94
+ type PatchFlatObject<O, O1, Fill, OKeys extends Key = keyof O> = {
95
95
  [K in keyof (O & _Omit<O1, OKeys>)]: PatchProp<At<O, K>, At<O1, K>, Fill, OKeys, K>;
96
96
  } & {};
97
- declare type PatchFlatList<L extends List, L1 extends List, Ignore, Fill> = number extends Length<L | L1> ? PatchFlatChoice<L[number], L1[number], Ignore, Fill>[] : Longer<L, L1> extends True ? {
97
+ type PatchFlatList<L extends List, L1 extends List, Ignore, Fill> = number extends Length<L | L1> ? PatchFlatChoice<L[number], L1[number], Ignore, Fill>[] : Longer<L, L1> extends True ? {
98
98
  [K in keyof L]: PatchProp<L[K], At<L1, K>, Fill, keyof L, K>;
99
99
  } : {
100
100
  [K in keyof L1]: PatchProp<At<L, K>, L1[K], Fill, keyof L, K>;
101
101
  };
102
- export declare type PatchFlatChoice<O, O1, Ignore, Fill> = O extends Ignore ? O : O1 extends Ignore ? O : O extends List ? O1 extends List ? PatchFlatList<O, O1, Ignore, Fill> : PatchFlatObject<O, O1, Fill> : PatchFlatObject<O, O1, Fill>;
103
- export declare type PatchFlat<O, O1, Ignore = BuiltIn, Fill = never> = O extends unknown ? O1 extends unknown ? PatchFlatChoice<O, O1, Ignore, Fill> : never : never;
104
- declare type PatchDeepList<L extends List, L1 extends List, Ignore, Fill> = number extends Length<L | L1> ? PatchDeepChoice<L[number], L1[number], Ignore, Fill, never, any>[] : Longer<L, L1> extends True ? {
102
+ export type PatchFlatChoice<O, O1, Ignore, Fill> = O extends Ignore ? O : O1 extends Ignore ? O : O extends List ? O1 extends List ? PatchFlatList<O, O1, Ignore, Fill> : PatchFlatObject<O, O1, Fill> : PatchFlatObject<O, O1, Fill>;
103
+ export type PatchFlat<O, O1, Ignore = BuiltIn, Fill = never> = O extends unknown ? O1 extends unknown ? PatchFlatChoice<O, O1, Ignore, Fill> : never : never;
104
+ type PatchDeepList<L extends List, L1 extends List, Ignore, Fill> = number extends Length<L | L1> ? PatchDeepChoice<L[number], L1[number], Ignore, Fill, never, any>[] : Longer<L, L1> extends True ? {
105
105
  [K in keyof L]: PatchDeepChoice<L[K], At<L1, K>, Ignore, Fill, keyof L, K>;
106
106
  } : {
107
107
  [K in keyof L1]: PatchDeepChoice<At<L, K>, L1[K], Ignore, Fill, keyof L, K>;
108
108
  };
109
- declare type PatchDeepObject<O, O1, Ignore, Fill, OKeys extends Key = keyof O> = {
109
+ type PatchDeepObject<O, O1, Ignore, Fill, OKeys extends Key = keyof O> = {
110
110
  [K in keyof (O & _Omit<O1, OKeys>)]: PatchDeepChoice<At<O, K>, At<O1, K>, Ignore, Fill, OKeys, K>;
111
111
  };
112
- declare type PatchDeepChoice<OK, O1K, Ignore, fill, OKeys extends Key, K extends Key> = [OK] extends [never] ? PatchProp<OK, O1K, fill, OKeys, K> : [O1K] extends [never] ? PatchProp<OK, O1K, fill, OKeys, K> : OK extends Ignore ? PatchProp<OK, O1K, fill, OKeys, K> : O1K extends Ignore ? PatchProp<OK, O1K, fill, OKeys, K> : OK extends List ? O1K extends List ? PatchDeepList<OK, O1K, Ignore, fill> : PatchProp<OK, O1K, fill, OKeys, K> : OK extends object ? O1K extends object ? PatchDeepObject<OK, O1K, Ignore, fill> : PatchProp<OK, O1K, fill, OKeys, K> : PatchProp<OK, O1K, fill, OKeys, K>;
113
- export declare type PatchDeep<O, O1, Ignore, Fill> = O extends unknown ? O1 extends unknown ? PatchDeepChoice<O, O1, Ignore, Fill, "x", "y"> : never : never;
114
- export declare type Diff<O, O1, M extends Match = "default"> = PatchFlat<Exclude<O, O1, M>, Exclude<O1, O, M>>;
115
- export declare type EnforceNonEmpty<O> = keyof O extends never ? never : O;
112
+ type PatchDeepChoice<OK, O1K, Ignore, fill, OKeys extends Key, K extends Key> = [OK] extends [never] ? PatchProp<OK, O1K, fill, OKeys, K> : [O1K] extends [never] ? PatchProp<OK, O1K, fill, OKeys, K> : OK extends Ignore ? PatchProp<OK, O1K, fill, OKeys, K> : O1K extends Ignore ? PatchProp<OK, O1K, fill, OKeys, K> : OK extends List ? O1K extends List ? PatchDeepList<OK, O1K, Ignore, fill> : PatchProp<OK, O1K, fill, OKeys, K> : OK extends object ? O1K extends object ? PatchDeepObject<OK, O1K, Ignore, fill> : PatchProp<OK, O1K, fill, OKeys, K> : PatchProp<OK, O1K, fill, OKeys, K>;
113
+ export type PatchDeep<O, O1, Ignore, Fill> = O extends unknown ? O1 extends unknown ? PatchDeepChoice<O, O1, Ignore, Fill, "x", "y"> : never : never;
114
+ export type Diff<O, O1, M extends Match = "default"> = PatchFlat<Exclude<O, O1, M>, Exclude<O1, O, M>>;
115
+ export type EnforceNonEmpty<O> = keyof O extends never ? never : O;
116
116
  export {};
package/String.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import type { Cast, Literal } from "./Any.js";
2
2
  import type { List, Pop } from "./List.js";
3
- declare type _Join<T extends List, D extends string> = T extends [] ? "" : T extends [Literal] ? `${T[0]}` : T extends [Literal, ...infer R] ? `${T[0]}${D}${_Join<R, D>}` : string;
4
- export declare type Join<T extends List<Literal>, D extends string = ""> = _Join<T, D> extends infer X ? Cast<X, string> : never;
5
- declare type __Split<S extends string, D extends string, T extends string[] = []> = S extends `${infer BS}${D}${infer AS}` ? __Split<AS, D, [...T, BS]> : [...T, S];
6
- declare type _Split<S extends string, D extends string = ""> = D extends "" ? Pop<__Split<S, D>> : __Split<S, D>;
7
- export declare type Split<S extends string, D extends string = ""> = _Split<S, D> extends infer X ? Cast<X, string[]> : never;
3
+ type _Join<T extends List, D extends string> = T extends [] ? "" : T extends [Literal] ? `${T[0]}` : T extends [Literal, ...infer R] ? `${T[0]}${D}${_Join<R, D>}` : string;
4
+ export type Join<T extends List<Literal>, D extends string = ""> = _Join<T, D> extends infer X ? Cast<X, string> : never;
5
+ type __Split<S extends string, D extends string, T extends string[] = []> = S extends `${infer BS}${D}${infer AS}` ? __Split<AS, D, [...T, BS]> : [...T, S];
6
+ type _Split<S extends string, D extends string = ""> = D extends "" ? Pop<__Split<S, D>> : __Split<S, D>;
7
+ export type Split<S extends string, D extends string = ""> = _Split<S, D> extends infer X ? Cast<X, string[]> : never;
8
8
  export {};
package/Union.d.ts CHANGED
@@ -1,23 +1,23 @@
1
1
  import type { Cast, Equals, Extends, Is, Match } from "./Any.js";
2
2
  import type { False, True } from "./Boolean.js";
3
3
  import type { List, Prepend } from "./List.js";
4
- export declare type IntersectionOf<U> = (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
5
- export declare type Last<U> = IntersectionOf<U extends unknown ? (x: U) => void : never> extends (x: infer P) => void ? P : never;
6
- declare type _ListOf<U, LN extends List = [], LastU = Last<U>> = Extends<[U], [never]> extends False ? _ListOf<Exclude<U, LastU>, Prepend<LN, LastU>> : LN;
7
- export declare type ListOf<U> = _ListOf<U> extends infer X ? Cast<X, List> : never;
8
- export declare type Has<A, B> = [B] extends [A] ? True : False;
9
- export declare type Select<U, M, _ extends Match = "default"> = U extends unknown ? {
4
+ export type IntersectionOf<U> = (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
5
+ export type Last<U> = IntersectionOf<U extends unknown ? (x: U) => void : never> extends (x: infer P) => void ? P : never;
6
+ type _ListOf<U, LN extends List = [], LastU = Last<U>> = Extends<[U], [never]> extends False ? _ListOf<Exclude<U, LastU>, Prepend<LN, LastU>> : LN;
7
+ export type ListOf<U> = _ListOf<U> extends infer X ? Cast<X, List> : never;
8
+ export type Has<A, B> = [B] extends [A] ? True : False;
9
+ export type Select<U, M, _ extends Match = "default"> = U extends unknown ? {
10
10
  [False]: never;
11
11
  [True]: U & M;
12
12
  }[Is<U, M, _>] : never;
13
- export declare type Filter<U, M, _ extends Match = "default"> = U extends unknown ? {
13
+ export type Filter<U, M, _ extends Match = "default"> = U extends unknown ? {
14
14
  [False]: U & M;
15
15
  [True]: never;
16
16
  }[Is<U, M, _>] : never;
17
- export declare type Intersect<A, B> = A extends unknown ? B extends unknown ? {
17
+ export type Intersect<A, B> = A extends unknown ? B extends unknown ? {
18
18
  [True]: A;
19
19
  [False]: never;
20
20
  }[Equals<A, B>] : never : never;
21
- export declare type Exclude<A, B> = A extends B ? never : A;
22
- export declare type Pop<U> = Exclude<U, Last<U>>;
21
+ export type Exclude<A, B> = A extends B ? never : A;
22
+ export type Pop<U> = Exclude<U, Last<U>>;
23
23
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fncts/typelevel",
3
- "version": "0.0.13",
3
+ "version": "0.0.14",
4
4
  "exports": {
5
5
  "./*": {
6
6
  "import": "./_mjs/*.mjs",