@eslinted/core 0.0.1-rc.0 → 0.0.1-rc.1
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/interface/IConfig.d.ts +21 -0
- package/interface/files/IFiles.d.ts +1 -0
- package/interface/option/IOption.d.ts +25 -0
- package/interface/option/language/IOLanguage.d.ts +15 -0
- package/interface/option/language/ecma/IOLanguageEcma.d.ts +20 -0
- package/interface/option/language/globals/IOLanguageGlobals.d.ts +3 -0
- package/interface/option/language/parser/IOLanguageParser.d.ts +3 -0
- package/interface/option/language/parserOptions/IOLanguageParserOptions.d.ts +5 -0
- package/interface/option/language/source/IOLanguageSource.d.ts +12 -0
- package/interface/option/linter/IOLinter.d.ts +30 -0
- package/interface/option/name/IOName.d.ts +3 -0
- package/interface/option/plugins/IOPlugins.d.ts +3 -0
- package/interface/option/processor/IOProcessor.d.ts +3 -0
- package/interface/rules/IRules.d.ts +1 -0
- package/interface/rules/rule/IRule.d.ts +1 -0
- package/interface/rules/rule/state/RuleSeverity.d.ts +5 -0
- package/package.json +2 -2
- package/tsconfig.json +4 -2
- package/types/literal/number/base32.d.ts +19 -0
- package/types/literal/number/base64.d.ts +35 -0
- package/types/literal/number/binary.d.ts +4 -0
- package/types/literal/number/decimal.d.ts +5 -0
- package/types/literal/number/hex.d.ts +10 -0
- package/types/literal/number/octal.d.ts +7 -0
- package/types/literal/number/quatral.d.ts +4 -0
- package/types/literal/number/ternary.d.ts +4 -0
- package/types/literal/string/base64char.d.ts +13 -0
- package/types/literal/string/digit.d.ts +12 -0
- package/types/literal/string/hexchar.d.ts +9 -0
- package/types/literal/string/letter.d.ts +35 -0
- package/types/safe/Safe.d.ts +2 -0
- package/types/safe/numbers/finite/Finite.d.ts +2 -0
- package/types/safe/numbers/finite.d.ts +1 -0
- package/types/safe/numbers/fint.d.ts +1 -0
- package/types/safe/numbers/int/Int.d.ts +2 -0
- package/types/safe/numbers/int.d.ts +1 -0
- package/types/safe/numbers/numberful.d.ts +1 -0
- package/types/safe/numbers/polarity/Negative.d.ts +4 -0
- package/types/safe/numbers/polarity/Positive.d.ts +4 -0
- package/types/safe/numbers/polarity/pole/Pole.d.ts +18 -0
- package/types/safe/primitive.d.ts +5 -0
- package/types/safe/strings/char.d.ts +1 -0
- package/types/safe/strings/length/PropLength.d.ts +3 -0
- package/types/safe/strings/stringful.d.ts +1 -0
- package/types/utility/interface/construct/Particord.d.ts +1 -0
- package/types/utility/interface/construct/Property.d.ts +8 -0
- package/types/utility/interface/construct/Recordful.d.ts +5 -0
- package/types/utility/interface/construct/Table.d.ts +3 -0
- package/types/utility/interface/construct/properties/Field.d.ts +1 -0
- package/types/utility/interface/construct/properties/Flag.d.ts +1 -0
- package/types/utility/interface/construct/properties/Limit.d.ts +8 -0
- package/types/utility/interface/construct/properties/List.d.ts +1 -0
- package/types/utility/interface/construct/properties/Listish.d.ts +1 -0
- package/types/utility/interface/construct/properties/Scalar.d.ts +1 -0
- package/types/utility/interface/construct/tables/FieldTable.d.ts +1 -0
- package/types/utility/interface/construct/tables/FlagTable.d.ts +1 -0
- package/types/utility/interface/construct/tables/ListTable.d.ts +1 -0
- package/types/utility/interface/construct/tables/ListishTable.d.ts +1 -0
- package/types/utility/interface/construct/tables/ScalarTable.d.ts +1 -0
- package/types/utility/interface/identity/Interface.d.ts +80 -0
- package/types/utility/interface/identity/Keys.d.ts +71 -0
- package/types/utility/interface/transform/Unrequire.d.ts +45 -0
- package/types/utility/iterable/construct/ArrayN.d.ts +12 -0
- package/types/utility/iterable/construct/Tuple.d.ts +27 -0
- package/types/utility/iterable/construct/arrays/Arrays.d.ts +1 -0
- package/types/utility/iterable/construct/tuples/Tuples.d.ts +9 -0
- package/types/utility/iterable/identity/DyadType.d.ts +3 -0
- package/types/utility/iterable/identity/MonadType.d.ts +48 -0
- package/types/utility/iterable/identity/TriadType.d.ts +3 -0
- package/types/utility/iterable/identity/array/ArrayType.d.ts +65 -0
- package/types/utility/iterable/identity/array/length/ArrayLength.d.ts +16 -0
- package/types/utility/iterable/transform/Join.d.ts +19 -0
- package/types/utility/iterable/transform/Unflat.d.ts +3 -0
- package/types/utility/iterable/transform/stringarray/Chain.d.ts +30 -0
- package/types/utility/iterable/transform/stringarray/PathN.d.ts +3 -0
- package/types/utility/iterable/transform/stringarray/stringify/Stringify.d.ts +5 -0
- package/types/utility/length/Length.d.ts +35 -0
- package/types/utility/null/null.d.ts +1 -0
- package/types/utility/null/nullable.d.ts +1 -0
- package/types/utility/primitive/Primeval.d.ts +42 -0
- package/types/utility/primitive/boolean/True.d.ts +30 -0
- package/types/utility/primitive/number/Numbered.d.ts +35 -0
- package/types/utility/primitive/string/literal.d.ts +22 -0
- 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,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,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,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,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
|
+
}
|