@eslinted/core 0.0.1-rc.0 → 0.0.1-rc.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. package/interface/IConfig.d.ts +21 -0
  2. package/interface/files/IFiles.d.ts +1 -0
  3. package/interface/option/IOption.d.ts +25 -0
  4. package/interface/option/language/IOLanguage.d.ts +15 -0
  5. package/interface/option/language/ecma/IOLanguageEcma.d.ts +20 -0
  6. package/interface/option/language/globals/IOLanguageGlobals.d.ts +3 -0
  7. package/interface/option/language/parser/IOLanguageParser.d.ts +3 -0
  8. package/interface/option/language/parserOptions/IOLanguageParserOptions.d.ts +5 -0
  9. package/interface/option/language/source/IOLanguageSource.d.ts +12 -0
  10. package/interface/option/linter/IOLinter.d.ts +30 -0
  11. package/interface/option/name/IOName.d.ts +3 -0
  12. package/interface/option/plugins/IOPlugins.d.ts +3 -0
  13. package/interface/option/processor/IOProcessor.d.ts +3 -0
  14. package/interface/rules/IRules.d.ts +1 -0
  15. package/interface/rules/rule/IRule.d.ts +1 -0
  16. package/interface/rules/rule/state/RuleSeverity.d.ts +5 -0
  17. package/package.json +2 -2
  18. package/tsconfig.json +4 -2
  19. package/types/literal/number/base32.d.ts +19 -0
  20. package/types/literal/number/base64.d.ts +35 -0
  21. package/types/literal/number/binary.d.ts +4 -0
  22. package/types/literal/number/decimal.d.ts +5 -0
  23. package/types/literal/number/hex.d.ts +10 -0
  24. package/types/literal/number/octal.d.ts +7 -0
  25. package/types/literal/number/quatral.d.ts +4 -0
  26. package/types/literal/number/ternary.d.ts +4 -0
  27. package/types/literal/string/base64char.d.ts +13 -0
  28. package/types/literal/string/digit.d.ts +12 -0
  29. package/types/literal/string/hexchar.d.ts +9 -0
  30. package/types/literal/string/letter.d.ts +35 -0
  31. package/types/safe/Safe.d.ts +2 -0
  32. package/types/safe/numbers/finite/Finite.d.ts +2 -0
  33. package/types/safe/numbers/finite.d.ts +1 -0
  34. package/types/safe/numbers/fint.d.ts +1 -0
  35. package/types/safe/numbers/int/Int.d.ts +2 -0
  36. package/types/safe/numbers/int.d.ts +1 -0
  37. package/types/safe/numbers/numberful.d.ts +1 -0
  38. package/types/safe/numbers/polarity/Negative.d.ts +4 -0
  39. package/types/safe/numbers/polarity/Positive.d.ts +4 -0
  40. package/types/safe/numbers/polarity/pole/Pole.d.ts +18 -0
  41. package/types/safe/primitive.d.ts +5 -0
  42. package/types/safe/strings/char.d.ts +1 -0
  43. package/types/safe/strings/length/PropLength.d.ts +3 -0
  44. package/types/safe/strings/stringful.d.ts +1 -0
  45. package/types/utility/interface/construct/Particord.d.ts +1 -0
  46. package/types/utility/interface/construct/Property.d.ts +8 -0
  47. package/types/utility/interface/construct/Recordful.d.ts +5 -0
  48. package/types/utility/interface/construct/Table.d.ts +3 -0
  49. package/types/utility/interface/construct/properties/Field.d.ts +1 -0
  50. package/types/utility/interface/construct/properties/Flag.d.ts +1 -0
  51. package/types/utility/interface/construct/properties/Limit.d.ts +8 -0
  52. package/types/utility/interface/construct/properties/List.d.ts +1 -0
  53. package/types/utility/interface/construct/properties/Listish.d.ts +1 -0
  54. package/types/utility/interface/construct/properties/Scalar.d.ts +1 -0
  55. package/types/utility/interface/construct/tables/FieldTable.d.ts +1 -0
  56. package/types/utility/interface/construct/tables/FlagTable.d.ts +1 -0
  57. package/types/utility/interface/construct/tables/ListTable.d.ts +1 -0
  58. package/types/utility/interface/construct/tables/ListishTable.d.ts +1 -0
  59. package/types/utility/interface/construct/tables/ScalarTable.d.ts +1 -0
  60. package/types/utility/interface/identity/Interface.d.ts +80 -0
  61. package/types/utility/interface/identity/Keys.d.ts +71 -0
  62. package/types/utility/interface/transform/Unrequire.d.ts +45 -0
  63. package/types/utility/iterable/construct/ArrayN.d.ts +12 -0
  64. package/types/utility/iterable/construct/Tuple.d.ts +27 -0
  65. package/types/utility/iterable/construct/arrays/Arrays.d.ts +1 -0
  66. package/types/utility/iterable/construct/tuples/Tuples.d.ts +9 -0
  67. package/types/utility/iterable/identity/DyadType.d.ts +3 -0
  68. package/types/utility/iterable/identity/MonadType.d.ts +48 -0
  69. package/types/utility/iterable/identity/TriadType.d.ts +3 -0
  70. package/types/utility/iterable/identity/array/ArrayType.d.ts +65 -0
  71. package/types/utility/iterable/identity/array/length/ArrayLength.d.ts +16 -0
  72. package/types/utility/iterable/transform/Join.d.ts +19 -0
  73. package/types/utility/iterable/transform/Unflat.d.ts +3 -0
  74. package/types/utility/iterable/transform/stringarray/Chain.d.ts +30 -0
  75. package/types/utility/iterable/transform/stringarray/PathN.d.ts +3 -0
  76. package/types/utility/iterable/transform/stringarray/stringify/Stringify.d.ts +5 -0
  77. package/types/utility/length/Length.d.ts +35 -0
  78. package/types/utility/null/null.d.ts +1 -0
  79. package/types/utility/null/nullable.d.ts +1 -0
  80. package/types/utility/primitive/Primeval.d.ts +42 -0
  81. package/types/utility/primitive/boolean/True.d.ts +30 -0
  82. package/types/utility/primitive/number/Numbered.d.ts +35 -0
  83. package/types/utility/primitive/string/literal.d.ts +22 -0
  84. package/types/utility/primitive/string/literalful.d.ts +28 -0
@@ -0,0 +1,71 @@
1
+ declare type Keys<R extends object> = Interface<R> extends never
2
+ ? never
3
+ : keyof Interface<R>;
4
+
5
+ declare namespace Keys {
6
+ const RESULT: {
7
+ positive: typeof POSITIVE | 1;
8
+ negative: typeof NEGATIVE | 0;
9
+ };
10
+
11
+ export const POSITIVE: {
12
+ T: Keys<{ a: 5 }>;
13
+ T0: Keys<{
14
+ a: 1;
15
+ b?: 2;
16
+ }>;
17
+ T1: Keys<{
18
+ a: 1;
19
+ b: 2;
20
+ }>;
21
+ } extends Record<string, string> ? "PASS" : never;
22
+ const s: unique symbol;
23
+
24
+ export const NEGATIVE: {
25
+ N: Keys<never>;
26
+ N0: Keys<{ [s]: 1 }>;
27
+ N1: Keys<Record<string, 1>>;
28
+ N1b: Keys<Record<stringful, 1>>;
29
+ N1c: Keys<Record<"", 1>>;
30
+ N1d: Keys<Record<number, 1>>;
31
+ N2: Keys<Record<stringful | "30", 1>>;
32
+ N2b: Keys<Record<stringful | "", 1>>;
33
+ N2c: Keys<Record<number | "", 1>>;
34
+ N2d: Keys<Record<number | "c", 1>>;
35
+ N2e: Keys<object>;
36
+ N2f: Keys<{
37
+ a: 1;
38
+ [min]: 1;
39
+ }>;
40
+ N3: Keys<[]>;
41
+ N3a: Keys<readonly [1, 1]>;
42
+ N4: Keys<
43
+ | {
44
+ a: 1;
45
+ b: 1;
46
+ }
47
+ | object
48
+ >;
49
+ N5: Keys<[1] | { a: 1 }>;
50
+ N5a: Keys<
51
+ | {
52
+ a: 1;
53
+ b: 1;
54
+ }
55
+ | { c: 1 }
56
+ >;
57
+ N5b: Keys<
58
+ | {
59
+ a: 1;
60
+ b: 1;
61
+ }
62
+ | { c?: 1 }
63
+ >;
64
+
65
+ // N10: Keys<null>;
66
+ // N10a: Keys<undefined>;
67
+ // N10b: Keys<void>;
68
+ // N10c: Keys<unknown>;
69
+ // N11c: Keys<Record<string | "30", 1>>;
70
+ } extends Record<string, never> ? "PASS" : never;
71
+ }
@@ -0,0 +1,45 @@
1
+ declare type Unrequire<R extends object, OK extends string> = Interface<R> extends never
2
+ ? never
3
+ : literalful<OK> extends never
4
+ ? never
5
+ : OK extends keyof R
6
+ ? Omit<Interface<R>, literalful<OK>> & Partial<Pick<Interface<R>, literalful<OK>>>
7
+ : never;
8
+
9
+ declare namespace Unrequire {
10
+ export type T = Unrequire<{
11
+ a: 1;
12
+ b: 1;
13
+ c: 1;
14
+ }, "c">;
15
+ export type T1c = "a" extends keyof T ? true : false; // true
16
+ export type T1b = "b" extends keyof T ? true : false; // true
17
+ export type T1 = "c" extends keyof T ? true : false; // true
18
+ export type T2 = {
19
+ a: 1;
20
+ b: 1;
21
+ } extends T ? true : false; // true
22
+ export type T2b = {
23
+ a: 1;
24
+ b: 1;
25
+ c: 1;
26
+ } extends T ? true : false; // true
27
+ export type T2c = {
28
+ a: 1;
29
+ b: 1;
30
+ c: 1;
31
+ z: 9001;
32
+ } extends T ? true : false; // true
33
+ }
34
+
35
+ declare namespace NotUnrequire {
36
+ export type N_null = {
37
+ a: 1;
38
+ b: 1;
39
+ c: 1;
40
+ } extends Unrequire.T ? true : false; // true
41
+ export type N = {
42
+ b: 1;
43
+ c: 1;
44
+ } extends Unrequire.T ? true : false; // false
45
+ }
@@ -0,0 +1,12 @@
1
+ // TODO: constrain to positive integer
2
+ declare type ArrayN<I, N extends number = 0> = [I] extends [never]
3
+ ? never
4
+ : N extends number
5
+ ? N extends 0
6
+ ? [...I[]]
7
+ : ArrayBuilder<I, N>
8
+ : never;
9
+
10
+ type ArrayBuilder<I, N extends number, H extends I[] = []> = H["length"] extends N
11
+ ? [...H, ...I[]]
12
+ : ArrayBuilder<I, N, [...H, I]>;
@@ -0,0 +1,27 @@
1
+ // TODO: constrain to positive integer
2
+ declare type Tuple<I, N extends number = 2> = [I] extends [never]
3
+ ? never
4
+ : N extends number
5
+ ? N extends 0
6
+ ? readonly []
7
+ : TupleBuilder<I, Numbered<N>>
8
+ : never;
9
+
10
+ type TupleBuilder<I, N, H extends readonly I[] = readonly []> = H["length"] extends N
11
+ ? H
12
+ : TupleBuilder<I, N, readonly [...H, I]>;
13
+
14
+ declare namespace Tuple {
15
+ export type T = Tuple<string>;
16
+ export type T0 = Tuple<string, 0>;
17
+ export type T0a = Tuple<string, 1>;
18
+ export type T0b = Tuple<string, 3>;
19
+ export type T1 = Tuple<string | number>;
20
+ export type T2 = Tuple<string, 2 | 3>;
21
+ export type T3 = Tuple<string | number, 2 | 3>;
22
+ export type T4 = Tuple<string, never>;
23
+ export type T4a = Tuple<string, 0>;
24
+ export type T4b = Tuple<string, 0 | 1>;
25
+ }
26
+
27
+ type NN = Numbered<5 | 10>;
@@ -0,0 +1 @@
1
+ declare type Arrayful<I> = ArrayN<I, 1>;
@@ -0,0 +1,9 @@
1
+ declare type Monad<I> = Tuple<I, 1>;
2
+ declare type Triad<I> = Tuple<I, 3>;
3
+ declare type Quad<I> = Tuple<I, 4>;
4
+ declare type Pentad<I> = Tuple<I, 5>;
5
+ declare type Hexad<I> = Tuple<I, 6>;
6
+ declare type Heptad<I> = Tuple<I, 7>;
7
+ declare type Octad<I> = Tuple<I, 8>;
8
+ declare type Nonad<I> = Tuple<I, 9>;
9
+ declare type Decad<I> = Tuple<I, 10>;
@@ -0,0 +1,3 @@
1
+ declare type DyadType<A extends readonly unknown[]> = 1 extends ArrayLength<A>
2
+ ? never
3
+ : MonadType<A>;
@@ -0,0 +1,48 @@
1
+ declare type MonadType<A extends readonly unknown[]> = 0 extends ArrayLength<A>
2
+ ? never
3
+ : ArrayType<A>;
4
+
5
+ declare namespace MonadType {
6
+ export type T0 = MonadType<[1, 1]>;
7
+ export type T1 = MonadType<readonly [1, 1]>;
8
+ export type T2 = MonadType<readonly [1, 1?]>;
9
+ export type T3 = MonadType<readonly [1?, 1?]>;
10
+ export type T4 = MonadType<readonly [1?, 1?]>;
11
+ export type T5 = MonadType<[[]]>;
12
+ export type T6 = MonadType<string[] | int[]>;
13
+ export type T7 = MonadType<(string | int)[]>;
14
+ export type T18 = MonadType<[string] | [5, 10]>;
15
+ export type T8a = MonadType<Tuple<boolean>>;
16
+ export type T8b = MonadType<ArrayN<string, 3>>;
17
+ export type T8c = MonadType<
18
+ | ArrayN<string, 3>
19
+ | Tuple<boolean>
20
+ | [string]
21
+ | [5, 10]
22
+ | [5, 13]
23
+ | readonly [5, 10]
24
+ >;
25
+ }
26
+
27
+ declare namespace NotMonadType {
28
+ export type N12 = MonadType<never>;
29
+ export type N26 = MonadType<[]>;
30
+ export type N27 = MonadType<string[]>;
31
+ export type N28 = MonadType<readonly []>;
32
+ export type N29 = MonadType<readonly string[]>;
33
+ export type N30 = MonadType<[5] | []>;
34
+ export type N30a = MonadType<[5] | string[]>;
35
+ export type N30b = MonadType<[5] | readonly []>;
36
+ export type N30c = MonadType<[5] | readonly string[]>;
37
+ export type N30d = MonadType<
38
+ | []
39
+ | [5, 10]
40
+ | string []
41
+ | readonly []
42
+ | readonly [5, 10]
43
+ | readonly string[]
44
+ >;
45
+ export type N31 = MonadType<ArrayN<string>>;
46
+ export type N32 = MonadType<[string?]>;
47
+ export type N33 = MonadType<readonly [string?]>;
48
+ }
@@ -0,0 +1,3 @@
1
+ declare type TriadType<A extends readonly unknown[]> = 2 extends ArrayLength<A>
2
+ ? never
3
+ : DyadType<A>;
@@ -0,0 +1,65 @@
1
+ declare type ArrayType<A> = [A] extends [readonly unknown[]] ? A : never;
2
+
3
+ // tests
4
+ declare namespace ArrayType {
5
+ export type T0 = ArrayType<[]>;
6
+ export type T1 = ArrayType<[1, 1]>;
7
+ export type T2 = ArrayType<string[]>;
8
+ export type T3 = ArrayType<readonly []>;
9
+ export type T4 = ArrayType<readonly [1, 1]>;
10
+ export type T5 = ArrayType<readonly string[]>;
11
+ export type T6 = ArrayType<[[]]>;
12
+ export type T7 = ArrayType<string[] | int[]>;
13
+ export type T8 = ArrayType<(string | int)[]>;
14
+ export type T9 = ArrayType<
15
+ | []
16
+ | [5, 10]
17
+ | string []
18
+ | readonly []
19
+ | readonly [5, 10]
20
+ | readonly string[]
21
+ >;
22
+ export type T10 = ArrayType<[1?, ...string[]]>;
23
+ export type T11 = ArrayType<[1] | [1, 2?]>;
24
+ }
25
+
26
+ declare namespace NotArrayType {
27
+ export type N0 = ArrayType<"">;
28
+ export type N1 = ArrayType<"test">;
29
+ export type N2 = ArrayType<string>;
30
+ export type N3 = ArrayType<boolean>;
31
+ export type N4 = ArrayType<true>;
32
+ export type N5 = ArrayType<false>;
33
+ export type N6 = ArrayType<0>;
34
+ export type N7 = ArrayType<1>;
35
+ export type N8 = ArrayType<number>;
36
+ export type N9 = ArrayType<null>;
37
+ export type N10 = ArrayType<undefined>;
38
+ export type N11 = ArrayType<unknown>;
39
+ export type N12 = ArrayType<never>;
40
+ export type N13 = ArrayType<void>;
41
+ export type N14 = ArrayType<()=> void>;
42
+ export type N15 = ArrayType<(a: string)=> []>;
43
+ export type N16 = ArrayType<Record<string, unknown>>;
44
+ export type N17 = ArrayType<Record<number, 5>>;
45
+ export type N18 = ArrayType<stringful>;
46
+ export type N19 = ArrayType<{ 0: string }>;
47
+ export type N20 = ArrayType<{
48
+ 0: string;
49
+ length: 1;
50
+ }>;
51
+ export type N21 = ArrayType<symbol>;
52
+ export type N22 = ArrayType<object>;
53
+ export type N23 = ArrayType<
54
+ | []
55
+ | object
56
+ >;
57
+ export type N24 = ArrayType<
58
+ | []
59
+ | string
60
+ >;
61
+ export type N25 = ArrayType<
62
+ | []
63
+ | null
64
+ >;
65
+ }
@@ -0,0 +1,16 @@
1
+ declare type ArrayLength<A extends readonly unknown[]> = Length<ArrayType<A>["length"]>;
2
+
3
+ declare namespace ArrayLength {
4
+ export type T0 = ArrayLength<[]>;
5
+ export type T0a = ArrayLength<string[]>;
6
+ export type T0b = ArrayLength<readonly []>;
7
+ export type T0d = ArrayLength<readonly string[]>;
8
+ export type T0c = ArrayLength<[string?, string?]>;
9
+ export type T1 = ArrayLength<[string] | [string, string?, string?]>;
10
+ export type T1b = ArrayLength<[string] | [string?, string?, string?]>; // 0 | 1 | 2 | 3 -- empty Tuple -> length: 0 is just 0, so does not consume other possible lengths
11
+ export type T1c = ArrayLength<string[] | [string, string, string]>; // 0 -- Array -> length: number coerced to length 0 but consumes all other possible lengths
12
+ }
13
+
14
+ declare namespace NotArrayLength {
15
+ export type N = ArrayLength<never>;
16
+ }
@@ -0,0 +1,19 @@
1
+ declare type Join<A extends readonly unknown[], D extends string = string> = ArrayType<A> extends never
2
+ ? never
3
+ : MonadType<A> extends never
4
+ ? string
5
+ : MonadType<A> extends readonly (infer I extends string)[]
6
+ ? [I] extends [stringful]
7
+ ? stringful
8
+ : Extract<I, stringful> extends never
9
+ ? literalful<I> extends never
10
+ ? DyadType<MonadType<A>> extends never
11
+ ? string
12
+ : literalful<D> extends never
13
+ ? [D] extends [stringful]
14
+ ? stringful
15
+ : string
16
+ : stringful
17
+ : stringful
18
+ : stringful
19
+ : never;
@@ -0,0 +1,3 @@
1
+ declare type Unflat<In = string, RO extends boolean = true> = [In] extends [never]
2
+ ? never
3
+ : In | (True<RO> extends never ? In[] : readonly In[]);
@@ -0,0 +1,30 @@
1
+ declare type Chain<
2
+ A extends readonly string[],
3
+ D extends string = "/",
4
+ Reverse extends boolean = false,
5
+ > = literal<D> extends never
6
+ ? never
7
+ : D extends D
8
+ ? ArrayType<A> extends never
9
+ ? never
10
+ : ArrayType<A> extends readonly [infer H extends string, ...infer T extends string[]]
11
+ ? ArrayType<T> extends readonly []
12
+ ? literalful<H>
13
+ : True<Reverse> extends never
14
+ ? `${literalful<H>}${literal<D>}${Chain<ArrayType<T>, literal<D>>}`
15
+ : `${Chain<ArrayType<T>, literal<D>, True<Reverse>>}${literal<D>}${literalful<H>}`
16
+ : never
17
+ : never;
18
+
19
+ declare namespace Chain {
20
+ export type T = Chain<["a", "b", "c"]>;
21
+ export type T0 = Chain<["a", "b", "c"], "">;
22
+ export type T0a = Chain<["a", "b", "c"], "-">;
23
+ export type T1 = Chain<["a", "b", "c"], "/", true>;
24
+ export type T1a = Chain<["a", "b", "c"], ".", true>;
25
+ export type T2 = Chain<["a", "b" | "bar", "c"]>;
26
+ export type T2a = Chain<["a" | "foo", "b" | "bar", "c"]>; // 4
27
+ export type T3 = Chain<["a", "b", "c"], "." | "/">;
28
+ export type T4 = Chain<["a" | "foo", "b" | "bar", "c"], "." | "/">; // 8
29
+ export type T5 = Chain<["a" | "foo", "b" | "bar", "c"], "." | "/", true>; // 8
30
+ }
@@ -0,0 +1,3 @@
1
+ declare type PathN<C, N extends number = 0> = Stringify<C> extends never
2
+ ? never
3
+ : ArrayN<Stringify<C>, N>;
@@ -0,0 +1,5 @@
1
+ declare type Stringify<C> = C extends Record<"string", infer S extends string>
2
+ ? S
3
+ : C extends Record<"toString", infer Fn extends ()=> string>
4
+ ? ReturnType<Fn>
5
+ : never;
@@ -0,0 +1,35 @@
1
+ declare type Length<N extends number> = [N] extends [number]
2
+ ? [number] extends [N]
3
+ ? 0
4
+ : Numbered<N>
5
+ : never;
6
+
7
+ declare namespace Length {
8
+ export type T0 = Length<0>;
9
+ export type T0a = Length<0.0>; // 0
10
+ export type T0b = Length<number>; // 0
11
+ export type T1 = Length<1>;
12
+ export type T1a = Length<1.0>; // 1
13
+ export type T2 = Length<1.1>; // 1.1
14
+ export type T3 = Length<1 | 5>; // 1 | 5
15
+ export type T3b = Length<0 | 1 | 5>; // 0 | 1 | 5
16
+ }
17
+
18
+ declare namespace NotLength {
19
+ export type N = Length<never>;
20
+
21
+ // export type N0 = Length<unknown>;
22
+ // export type N0a = Length<undefined>;
23
+ // export type N0b = Length<null>;
24
+ // export type N0c = Length<void>;
25
+ // export type N0d = Length<undefined>;
26
+ // export type N0e = Length<undefined>;
27
+ // export type N1 = Length<"1">;
28
+ // export type N1a = Length<true>;
29
+ // export type N1b = Length<[5, 5]>;
30
+ // export type N1c = Length<()=> void>;
31
+ // export type N1d = Length<object>;
32
+ // export type N2 = Length<null | 1>;
33
+ // export type N2a = Length<true | 1>;
34
+ // export type N2b = Length<number | 1>; // 0
35
+ }
@@ -0,0 +1 @@
1
+ declare type Null<T> = null | T;
@@ -0,0 +1 @@
1
+ declare type Nullable<T> = Null<NonNullable<T>>;
@@ -0,0 +1,42 @@
1
+ declare type Primeval<P extends T, T extends primitive> = [T] extends [primitive]
2
+ ? [P] extends [T]
3
+ ? Extract<P, object> extends never
4
+ ? Exclude<P, T> extends never
5
+ ? T extends P
6
+ ? never
7
+ : P
8
+ : never
9
+ : never
10
+ : never
11
+ : never;
12
+
13
+ declare namespace Primeval {
14
+ export type T0 = Primeval<"fast", string>;
15
+ export type T0a = Primeval<"", string>;
16
+ export type T0b = Primeval<"fast" | "good", string>;
17
+ export type T0c = Primeval<"fast" | "", string>;
18
+ export type T1 = Primeval<5, number>;
19
+ export type T1a = Primeval<0, number>;
20
+ export type T2 = Primeval<true, boolean>;
21
+ export type T2a = Primeval<false, boolean>;
22
+ }
23
+
24
+ declare namespace NotPrimeval {
25
+ export type N0 = Primeval<string, string>;
26
+ export type N0a = Primeval<number, number>;
27
+ export type N0b = Primeval<boolean, boolean>;
28
+ export type N1 = Primeval<stringful, string>;
29
+ export type N1b = Primeval<numberful, number>;
30
+
31
+ // export type N2 = Primeval<number | 5, number>;
32
+ // export type N2a = Primeval<string | "good", string>;
33
+ // export type N2b = Primeval<boolean | true, boolean>;
34
+ // export type N3 = Primeval<5, number | object>;
35
+ // export type N3a = Primeval<symbol, symbol>;
36
+ // export type N3b = Primeval<object, object>;
37
+ // export type N3c = Primeval<[], readonly unknown[]>;
38
+ // export type N3d = Primeval<()=> 5, Function>;
39
+ // export type N3e = Primeval<5, unknown>;
40
+ // export type N3f = Primeval<true | 10, boolean>;
41
+ // export type N3g = Primeval<string | "good", string>;
42
+ }
@@ -0,0 +1,30 @@
1
+ declare type True<B extends boolean> = true extends Primeval<B, boolean>
2
+ ? Primeval<B, boolean>
3
+ : never;
4
+
5
+ declare namespace True {
6
+ export type T0 = True<true>;
7
+ }
8
+
9
+ declare namespace NotTrue {
10
+
11
+ export type N0 = True<never>;
12
+ export type N1 = True<false>;
13
+ export type N1a = True<false | true>;
14
+ export type N1b = True<boolean>;
15
+
16
+ // export type N2 = True<true | 10>;
17
+ // export type N2a = True<true | object>;
18
+ // export type N2b = True<true | undefined>;
19
+ // export type N2c = True<true | null>;
20
+ // export type N2d = True<0>;
21
+ // export type N2e = True<1>;
22
+ // export type N2f = True<number>;
23
+ // export type N2g = True<"">;
24
+ // export type N2h = True<"true">;
25
+ // export type N2i = True<"foo">;
26
+ // export type N2j = True<null>;
27
+ // export type N2k = True<undefined>;
28
+ // export type N2l = True<[]>;
29
+ // export type N2m = True<object>;
30
+ }
@@ -0,0 +1,35 @@
1
+ declare type Numbered<N extends number> = Primeval<N, number>;
2
+
3
+ declare namespace Numbered {
4
+ export type T0 = Numbered<0>;
5
+ export type T1 = Numbered<0.0>;
6
+ export type T2 = Numbered<1>;
7
+ export type T3 = Numbered<1.0>;
8
+ export type T4 = Numbered<1.1>;
9
+ export type T5 = Numbered<1 | 5>;
10
+ }
11
+
12
+ declare namespace NumberedNever {
13
+ export type N0 = Numbered<number>;
14
+ export type N0b = Numbered<numberful>;
15
+ export type N0c = Numbered<number | numberful>;
16
+ export type N0d = Numbered<1 | numberful>;
17
+ export type N1 = Numbered<never>;
18
+
19
+ // export type N0e = Numbered<1 | number>;
20
+ // export type N2 = Numbered<"cool">;
21
+ // export type N3 = Numbered<"NaN">;
22
+ // export type N4 = Numbered<"5">;
23
+ // export type N5 = Numbered<string>;
24
+ // export type N6 = Numbered<boolean>;
25
+ // export type N6a = Numbered<true>;
26
+ // export type N6b = Numbered<false>;
27
+ // export type N7 = Numbered<null>;
28
+ // export type N8 = Numbered<undefined>;
29
+ // export type N9 = Numbered<void>;
30
+ // export type N10 = Numbered<object>;
31
+ // export type N11 = Numbered<[]>;
32
+ // export type N12 = Numbered<5 | true>;
33
+ // export type N13 = Numbered<()=> 5>;
34
+ // export type N14 = Numbered<symbol>;
35
+ }
@@ -0,0 +1,22 @@
1
+ declare type literal<S extends string> = Primeval<S, string>;
2
+
3
+ declare namespace literal {
4
+ export type T = literal<"">;
5
+ export type T0 = literal<"a">;
6
+ export type T1 = literal<"a" | "b">;
7
+ export type T1b = literal<"a" | "">;
8
+ }
9
+
10
+ declare namespace Notliteral {
11
+ export type N = literal<never>;
12
+ export type N0 = literal<string>;
13
+
14
+ // export type N1 = literal<unknown>;
15
+ // export type N2 = literal<null>;
16
+ // export type N3 = literal<undefined>;
17
+ // export type N4 = literal<void>;
18
+ // export type N5 = literal<object>;
19
+ // export type N6 = literal<()=> "a">;
20
+ // export type N7 = literal<symbol>;
21
+ // export type N8 = literal<"a" | 5>;
22
+ }
@@ -0,0 +1,28 @@
1
+ declare type literalful<S extends string> = "" extends literal<S>
2
+ ? never
3
+ : literal<S>;
4
+
5
+ declare namespace literalful {
6
+ export type T0 = literalful<"a">;
7
+ export type T1 = literalful<"a" | "b">;
8
+ }
9
+
10
+ declare namespace Notliteralful {
11
+
12
+ export type N0 = literalful<never>;
13
+ export type N1 = literalful<"">;
14
+ export type N2 = literalful<string>;
15
+ export type N2b = literalful<stringful>;
16
+ export type N3 = literalful<"" | "a">;
17
+
18
+ // export type N5 = literalful<"a" | string>;
19
+ // export type N5a = literalful<unknown>;
20
+ // export type N5b = literalful<null>;
21
+ // export type N5c = literalful<undefined>;
22
+ // export type N5d = literalful<void>;
23
+ // export type N5e = literalful<[]>;
24
+ // export type N5f = literalful<object>;
25
+ // export type N5g = literalful<()=> "a">;
26
+ // export type N5h = literalful<symbol>;
27
+ // export type N5i = literalful<"a" | 5>;
28
+ }