@eslinted/core 0.0.1-rc.0 → 0.0.1-rc.3
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +65 -1
- package/dist/index.js.map +1 -1
- package/dist/options/HtmlOption.d.ts +5 -0
- package/dist/options/HtmlOption.d.ts.map +1 -0
- package/dist/options/HtmlOption.js +16 -0
- package/dist/options/HtmlOption.js.map +1 -0
- package/dist/options/JsOption.d.ts +5 -0
- package/dist/options/JsOption.d.ts.map +1 -0
- package/dist/options/JsOption.js +19 -0
- package/dist/options/JsOption.js.map +1 -0
- package/dist/options/JsonOption.d.ts +5 -0
- package/dist/options/JsonOption.d.ts.map +1 -0
- package/dist/options/JsonOption.js +16 -0
- package/dist/options/JsonOption.js.map +1 -0
- package/dist/options/JsoncOption.d.ts +5 -0
- package/dist/options/JsoncOption.d.ts.map +1 -0
- package/dist/options/JsoncOption.js +16 -0
- package/dist/options/JsoncOption.js.map +1 -0
- package/dist/options/MdOption.d.ts +5 -0
- package/dist/options/MdOption.d.ts.map +1 -0
- package/dist/options/MdOption.js +16 -0
- package/dist/options/MdOption.js.map +1 -0
- package/dist/options/SvelteOption.d.ts +10 -0
- package/dist/options/SvelteOption.d.ts.map +1 -0
- package/dist/options/SvelteOption.js +28 -0
- package/dist/options/SvelteOption.js.map +1 -0
- package/dist/options/TsOption.d.ts +8 -0
- package/dist/options/TsOption.d.ts.map +1 -0
- package/dist/options/TsOption.js +25 -0
- package/dist/options/TsOption.js.map +1 -0
- package/dist/options/YmlOption.d.ts +5 -0
- package/dist/options/YmlOption.d.ts.map +1 -0
- package/dist/options/YmlOption.js +16 -0
- package/dist/options/YmlOption.js.map +1 -0
- package/dist/options/option/Option.d.ts +5 -0
- package/dist/options/option/Option.d.ts.map +1 -0
- package/dist/options/option/Option.js +7 -0
- package/dist/options/option/Option.js.map +1 -0
- package/dist/options.d.ts +18 -0
- package/dist/options.d.ts.map +1 -0
- package/dist/options.js +17 -0
- package/dist/options.js.map +1 -0
- package/dist/rulesets/ruleset/Ruleset.d.ts +12 -0
- package/dist/rulesets/ruleset/Ruleset.d.ts.map +1 -0
- package/dist/rulesets/ruleset/Ruleset.js +27 -0
- package/dist/rulesets/ruleset/Ruleset.js.map +1 -0
- package/dist/rulesets/ruleset/rule/Rule.d.ts +6 -0
- package/dist/rulesets/ruleset/rule/Rule.d.ts.map +1 -0
- package/dist/rulesets/ruleset/rule/Rule.js +9 -0
- package/dist/rulesets/ruleset/rule/Rule.js.map +1 -0
- package/dist/scopes.d.ts +3 -0
- package/dist/scopes.d.ts.map +1 -0
- package/dist/scopes.js +11 -0
- package/dist/scopes.js.map +1 -0
- 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/src/Scope.d.ts +9 -0
- package/src/index.ts +113 -0
- package/src/options/HtmlOption.ts +31 -0
- package/src/options/JsOption.ts +27 -0
- package/src/options/JsonOption.ts +31 -0
- package/src/options/JsoncOption.ts +31 -0
- package/src/options/MdOption.ts +31 -0
- package/src/options/SvelteOption.ts +47 -0
- package/src/options/TsOption.ts +40 -0
- package/src/options/YmlOption.ts +31 -0
- package/src/options/option/Option.ts +25 -0
- package/src/options.ts +17 -0
- package/src/plugins.d.ts +24 -0
- package/src/rulesets/ruleset/Ruleset.ts +50 -0
- package/src/rulesets/ruleset/rule/Rule.ts +6 -0
- package/src/scopes.ts +11 -0
- 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,35 @@
|
|
1
|
+
declare type base64 =
|
2
|
+
| base32
|
3
|
+
| 32
|
4
|
+
| 33
|
5
|
+
| 34
|
6
|
+
| 35
|
7
|
+
| 36
|
8
|
+
| 37
|
9
|
+
| 38
|
10
|
+
| 39
|
11
|
+
| 40
|
12
|
+
| 41
|
13
|
+
| 42
|
14
|
+
| 43
|
15
|
+
| 44
|
16
|
+
| 45
|
17
|
+
| 46
|
18
|
+
| 47
|
19
|
+
| 48
|
20
|
+
| 49
|
21
|
+
| 50
|
22
|
+
| 51
|
23
|
+
| 52
|
24
|
+
| 53
|
25
|
+
| 54
|
26
|
+
| 55
|
27
|
+
| 56
|
28
|
+
| 57
|
29
|
+
| 58
|
30
|
+
| 59
|
31
|
+
| 60
|
32
|
+
| 61
|
33
|
+
| 62
|
34
|
+
| 63
|
35
|
+
;
|
@@ -0,0 +1,35 @@
|
|
1
|
+
declare type letter =
|
2
|
+
| lower
|
3
|
+
| upper
|
4
|
+
;
|
5
|
+
|
6
|
+
declare type lower = Lowercase<upper>;
|
7
|
+
|
8
|
+
declare type upper =
|
9
|
+
| "A"
|
10
|
+
| "B"
|
11
|
+
| "C"
|
12
|
+
| "D"
|
13
|
+
| "E"
|
14
|
+
| "F"
|
15
|
+
| "G"
|
16
|
+
| "H"
|
17
|
+
| "I"
|
18
|
+
| "J"
|
19
|
+
| "K"
|
20
|
+
| "L"
|
21
|
+
| "M"
|
22
|
+
| "N"
|
23
|
+
| "O"
|
24
|
+
| "P"
|
25
|
+
| "Q"
|
26
|
+
| "R"
|
27
|
+
| "S"
|
28
|
+
| "T"
|
29
|
+
| "U"
|
30
|
+
| "V"
|
31
|
+
| "W"
|
32
|
+
| "X"
|
33
|
+
| "Y"
|
34
|
+
| "Z"
|
35
|
+
;
|
@@ -0,0 +1 @@
|
|
1
|
+
declare type finite = Finite<numberful>;
|
@@ -0,0 +1 @@
|
|
1
|
+
declare type fint = Finite<int>;
|
@@ -0,0 +1 @@
|
|
1
|
+
declare type int = Int<numberful>;
|
@@ -0,0 +1 @@
|
|
1
|
+
declare type numberful = Safe<number, "numberful">;
|
@@ -0,0 +1,18 @@
|
|
1
|
+
declare const pole: unique symbol;
|
2
|
+
declare const min: unique symbol;
|
3
|
+
declare type Pole<
|
4
|
+
N extends number,
|
5
|
+
P extends
|
6
|
+
| "-"
|
7
|
+
| "+"
|
8
|
+
,
|
9
|
+
Zero,
|
10
|
+
> =
|
11
|
+
& N
|
12
|
+
& {
|
13
|
+
[pole]: P;
|
14
|
+
[min]: Zero extends false
|
15
|
+
? P extends "+" ? 1 : -1
|
16
|
+
: 0;
|
17
|
+
}
|
18
|
+
;
|
@@ -0,0 +1 @@
|
|
1
|
+
declare type char = stringful & PropLength<1>;
|
@@ -0,0 +1 @@
|
|
1
|
+
declare type stringful = Safe<string, "stringful"> & { 0: stringful & PropLength<1> };
|
@@ -0,0 +1 @@
|
|
1
|
+
declare type Particord<K extends string, V> = Partial<Recordful<K, V>>;
|
@@ -0,0 +1 @@
|
|
1
|
+
declare type Field<K extends string, OK extends string = never> = Property<K, OK, string>;
|
@@ -0,0 +1 @@
|
|
1
|
+
declare type Flag<OK extends string, K extends string = never> = Property<K, OK, boolean>;
|
@@ -0,0 +1 @@
|
|
1
|
+
declare type List<K extends string, OK extends string = never> = Property<K, OK, readonly string[]>;
|
@@ -0,0 +1 @@
|
|
1
|
+
declare type Listish<K extends string, OK extends string = never> = Property<K, OK, Unflat>;
|
@@ -0,0 +1 @@
|
|
1
|
+
declare type Scalar<K extends string, OK extends string = never> = Property<K, OK, number>;
|
@@ -0,0 +1 @@
|
|
1
|
+
declare type FieldTable = Table<string>;
|
@@ -0,0 +1 @@
|
|
1
|
+
declare type FlagTable = Table<boolean>;
|
@@ -0,0 +1 @@
|
|
1
|
+
declare type ListTable = Table<readonly string[]>;
|
@@ -0,0 +1 @@
|
|
1
|
+
declare type ListishTable = Table<Unflat>;
|
@@ -0,0 +1 @@
|
|
1
|
+
declare type ScalarTable = Table<number>;
|
@@ -0,0 +1,80 @@
|
|
1
|
+
declare type Interface<R extends object> = [R] extends [object]
|
2
|
+
? [Extract<R, readonly unknown[]>] extends [never]
|
3
|
+
? Required<R> extends Record<infer K, unknown>
|
4
|
+
? Exclude<K, string> extends never
|
5
|
+
? literalful<K & string> extends never
|
6
|
+
? never
|
7
|
+
: R
|
8
|
+
: never
|
9
|
+
: never
|
10
|
+
: never
|
11
|
+
: never;
|
12
|
+
|
13
|
+
declare namespace InterfaceTest {
|
14
|
+
export type T = Interface<{ a: 5 }>;
|
15
|
+
export type T0 = Interface<{
|
16
|
+
a: 1;
|
17
|
+
b?: 2;
|
18
|
+
}>;
|
19
|
+
export type T1 = Interface<{
|
20
|
+
a: 1;
|
21
|
+
b: 2;
|
22
|
+
}>;
|
23
|
+
export type T2 = Interface<Record<"a", unknown>>;
|
24
|
+
export type T3 = Interface<Record<"a" | "b", unknown>>;
|
25
|
+
}
|
26
|
+
|
27
|
+
declare namespace NotInterface {
|
28
|
+
export type N = Interface<never>;
|
29
|
+
export type N0 = Interface<object>;
|
30
|
+
export type N0a = Interface<Record<"a" | "b" | 5, unknown>>;
|
31
|
+
export type N0b = Interface<Record<"a" | "b" | number, unknown>>;
|
32
|
+
export type N0c = Interface<Record<string, unknown>>;
|
33
|
+
export type N0d = Interface<Record<string | number, unknown>>;
|
34
|
+
export type N0e = Interface<Record<stringful, string>>;
|
35
|
+
export type N0f = Interface<Record<stringful | "5", string>>;
|
36
|
+
export type N1 = Interface<[]>;
|
37
|
+
export type N1b = Interface<[1]>;
|
38
|
+
export type N1c = Interface<[1, 1]>;
|
39
|
+
export type N1d = Interface<number[]>;
|
40
|
+
export type N1e = Interface<readonly []>;
|
41
|
+
export type N1f = Interface<readonly [1]>;
|
42
|
+
export type N1g = Interface<readonly [1, 1]>;
|
43
|
+
export type N1h = Interface<readonly number[]>;
|
44
|
+
export type N2 = Interface<()=> void>;
|
45
|
+
export type N2a = Interface<(a: string)=> boolean>;
|
46
|
+
export type N2b = Interface<(a: string)=> string[]>;
|
47
|
+
export type N2c = Interface<(a: string)=> object>;
|
48
|
+
export type N5 = Interface<[] | { a: 1 }>;
|
49
|
+
export type N5a = Interface<[30] | { a: 1 }>;
|
50
|
+
export type N5b = Interface<object | []>;
|
51
|
+
export type N5c = Interface<
|
52
|
+
| {
|
53
|
+
a: 1;
|
54
|
+
b: 2;
|
55
|
+
}
|
56
|
+
| {
|
57
|
+
a: 1;
|
58
|
+
b: 2;
|
59
|
+
c: 2;
|
60
|
+
}
|
61
|
+
>;
|
62
|
+
|
63
|
+
// export type N3 = Interface<stringful>;
|
64
|
+
// export type N3b = Interface<numberful>;
|
65
|
+
// export type N13c = Interface<string>;
|
66
|
+
// export type N13d = Interface<"cool">;
|
67
|
+
// export type N13e = Interface<number>;
|
68
|
+
// export type N13f = Interface<0>;
|
69
|
+
// export type N13g = Interface<1>;
|
70
|
+
// export type N13h = Interface<true>;
|
71
|
+
// export type N13i = Interface<false>;
|
72
|
+
// export type N13j = Interface<boolean>;
|
73
|
+
// export type N14 = Interface<null>;
|
74
|
+
// export type N14a = Interface<undefined>;
|
75
|
+
// export type N14c = Interface<unknown>;
|
76
|
+
// export type N15 = Interface<string | { a: cool }>;
|
77
|
+
// export type N15b = Interface<Record<"a" | "b" | string, unknown>>;
|
78
|
+
}
|
79
|
+
|
80
|
+
type gg = Extract<{ a: 5 }, readonly unknown[]>;
|
@@ -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
|
+
}
|