Skip to content

Commit a0fc905

Browse files
Merge pull request #11252 from Microsoft/mapOnTuples
Add overloads for 'map' on tuple types
2 parents e70f4ac + e4e1102 commit a0fc905

File tree

47 files changed

+674
-107
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+674
-107
lines changed

src/lib/es5.d.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1200,6 +1200,30 @@ interface Array<T> {
12001200
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
12011201
*/
12021202
forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void;
1203+
/**
1204+
* Calls a defined callback function on each element of an array, and returns an array that contains the results.
1205+
* @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.
1206+
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
1207+
*/
1208+
map<U>(this: [T, T, T, T, T], callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): [U, U, U, U, U];
1209+
/**
1210+
* Calls a defined callback function on each element of an array, and returns an array that contains the results.
1211+
* @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.
1212+
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
1213+
*/
1214+
map<U>(this: [T, T, T, T], callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): [U, U, U, U];
1215+
/**
1216+
* Calls a defined callback function on each element of an array, and returns an array that contains the results.
1217+
* @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.
1218+
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
1219+
*/
1220+
map<U>(this: [T, T, T], callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): [U, U, U];
1221+
/**
1222+
* Calls a defined callback function on each element of an array, and returns an array that contains the results.
1223+
* @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.
1224+
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
1225+
*/
1226+
map<U>(this: [T, T], callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): [U, U];
12031227
/**
12041228
* Calls a defined callback function on each element of an array, and returns an array that contains the results.
12051229
* @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.

tests/baselines/reference/anyInferenceAnonymousFunctions.symbols

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,16 @@ paired.reduce((b3, b4) => b3.concat({}), []);
3535
>b3 : Symbol(b3, Decl(anyInferenceAnonymousFunctions.ts, 13, 15))
3636

3737
paired.map((c1) => c1.count);
38-
>paired.map : Symbol(Array.map, Decl(lib.d.ts, --, --))
38+
>paired.map : Symbol(Array.map, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
3939
>paired : Symbol(paired, Decl(anyInferenceAnonymousFunctions.ts, 0, 3))
40-
>map : Symbol(Array.map, Decl(lib.d.ts, --, --))
40+
>map : Symbol(Array.map, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
4141
>c1 : Symbol(c1, Decl(anyInferenceAnonymousFunctions.ts, 15, 12))
4242
>c1 : Symbol(c1, Decl(anyInferenceAnonymousFunctions.ts, 15, 12))
4343

4444
paired.map(function (c2) { return c2.count; });
45-
>paired.map : Symbol(Array.map, Decl(lib.d.ts, --, --))
45+
>paired.map : Symbol(Array.map, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
4646
>paired : Symbol(paired, Decl(anyInferenceAnonymousFunctions.ts, 0, 3))
47-
>map : Symbol(Array.map, Decl(lib.d.ts, --, --))
47+
>map : Symbol(Array.map, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
4848
>c2 : Symbol(c2, Decl(anyInferenceAnonymousFunctions.ts, 16, 21))
4949
>c2 : Symbol(c2, Decl(anyInferenceAnonymousFunctions.ts, 16, 21))
5050

tests/baselines/reference/anyInferenceAnonymousFunctions.types

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@ paired.reduce((b3, b4) => b3.concat({}), []);
5757

5858
paired.map((c1) => c1.count);
5959
>paired.map((c1) => c1.count) : any[]
60-
>paired.map : <U>(callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any) => U[]
60+
>paired.map : { <U>(this: [any, any, any, any, any], callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any): [U, U, U, U, U]; <U>(this: [any, any, any, any], callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any): [U, U, U, U]; <U>(this: [any, any, any], callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any): [U, U, U]; <U>(this: [any, any], callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any): [U, U]; <U>(callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any): U[]; }
6161
>paired : any[]
62-
>map : <U>(callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any) => U[]
62+
>map : { <U>(this: [any, any, any, any, any], callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any): [U, U, U, U, U]; <U>(this: [any, any, any, any], callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any): [U, U, U, U]; <U>(this: [any, any, any], callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any): [U, U, U]; <U>(this: [any, any], callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any): [U, U]; <U>(callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any): U[]; }
6363
>(c1) => c1.count : (c1: any) => any
6464
>c1 : any
6565
>c1.count : any
@@ -68,9 +68,9 @@ paired.map((c1) => c1.count);
6868

6969
paired.map(function (c2) { return c2.count; });
7070
>paired.map(function (c2) { return c2.count; }) : any[]
71-
>paired.map : <U>(callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any) => U[]
71+
>paired.map : { <U>(this: [any, any, any, any, any], callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any): [U, U, U, U, U]; <U>(this: [any, any, any, any], callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any): [U, U, U, U]; <U>(this: [any, any, any], callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any): [U, U, U]; <U>(this: [any, any], callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any): [U, U]; <U>(callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any): U[]; }
7272
>paired : any[]
73-
>map : <U>(callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any) => U[]
73+
>map : { <U>(this: [any, any, any, any, any], callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any): [U, U, U, U, U]; <U>(this: [any, any, any, any], callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any): [U, U, U, U]; <U>(this: [any, any, any], callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any): [U, U, U]; <U>(this: [any, any], callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any): [U, U]; <U>(callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any): U[]; }
7474
>function (c2) { return c2.count; } : (c2: any) => any
7575
>c2 : any
7676
>c2.count : any
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
=== tests/cases/compiler/arrayConcatMap.ts ===
22
var x = [].concat([{ a: 1 }], [{ a: 2 }])
33
>x : Symbol(x, Decl(arrayConcatMap.ts, 0, 3))
4-
>[].concat([{ a: 1 }], [{ a: 2 }]) .map : Symbol(Array.map, Decl(lib.d.ts, --, --))
4+
>[].concat([{ a: 1 }], [{ a: 2 }]) .map : Symbol(Array.map, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
55
>[].concat : Symbol(Array.concat, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
66
>concat : Symbol(Array.concat, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
77
>a : Symbol(a, Decl(arrayConcatMap.ts, 0, 20))
88
>a : Symbol(a, Decl(arrayConcatMap.ts, 0, 32))
99

1010
.map(b => b.a);
11-
>map : Symbol(Array.map, Decl(lib.d.ts, --, --))
11+
>map : Symbol(Array.map, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
1212
>b : Symbol(b, Decl(arrayConcatMap.ts, 1, 15))
1313
>b : Symbol(b, Decl(arrayConcatMap.ts, 1, 15))
1414

tests/baselines/reference/arrayConcatMap.types

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
var x = [].concat([{ a: 1 }], [{ a: 2 }])
33
>x : any[]
44
>[].concat([{ a: 1 }], [{ a: 2 }]) .map(b => b.a) : any[]
5-
>[].concat([{ a: 1 }], [{ a: 2 }]) .map : <U>(callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any) => U[]
5+
>[].concat([{ a: 1 }], [{ a: 2 }]) .map : { <U>(this: [any, any, any, any, any], callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any): [U, U, U, U, U]; <U>(this: [any, any, any, any], callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any): [U, U, U, U]; <U>(this: [any, any, any], callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any): [U, U, U]; <U>(this: [any, any], callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any): [U, U]; <U>(callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any): U[]; }
66
>[].concat([{ a: 1 }], [{ a: 2 }]) : any[]
77
>[].concat : { (...items: any[][]): any[]; (...items: any[]): any[]; }
88
>[] : undefined[]
@@ -17,7 +17,7 @@ var x = [].concat([{ a: 1 }], [{ a: 2 }])
1717
>2 : 2
1818

1919
.map(b => b.a);
20-
>map : <U>(callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any) => U[]
20+
>map : { <U>(this: [any, any, any, any, any], callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any): [U, U, U, U, U]; <U>(this: [any, any, any, any], callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any): [U, U, U, U]; <U>(this: [any, any, any], callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any): [U, U, U]; <U>(this: [any, any], callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any): [U, U]; <U>(callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any): U[]; }
2121
>b => b.a : (b: any) => any
2222
>b : any
2323
>b.a : any

tests/baselines/reference/bestChoiceType.symbols

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
// Repro from #10041
44

55
(''.match(/ /) || []).map(s => s.toLowerCase());
6-
>(''.match(/ /) || []).map : Symbol(Array.map, Decl(lib.d.ts, --, --))
6+
>(''.match(/ /) || []).map : Symbol(Array.map, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
77
>''.match : Symbol(String.match, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
88
>match : Symbol(String.match, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
9-
>map : Symbol(Array.map, Decl(lib.d.ts, --, --))
9+
>map : Symbol(Array.map, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
1010
>s : Symbol(s, Decl(bestChoiceType.ts, 3, 26))
1111
>s.toLowerCase : Symbol(String.toLowerCase, Decl(lib.d.ts, --, --))
1212
>s : Symbol(s, Decl(bestChoiceType.ts, 3, 26))
@@ -28,9 +28,9 @@ function f1() {
2828

2929
let z = y.map(s => s.toLowerCase());
3030
>z : Symbol(z, Decl(bestChoiceType.ts, 10, 7))
31-
>y.map : Symbol(Array.map, Decl(lib.d.ts, --, --))
31+
>y.map : Symbol(Array.map, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
3232
>y : Symbol(y, Decl(bestChoiceType.ts, 9, 7))
33-
>map : Symbol(Array.map, Decl(lib.d.ts, --, --))
33+
>map : Symbol(Array.map, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
3434
>s : Symbol(s, Decl(bestChoiceType.ts, 10, 18))
3535
>s.toLowerCase : Symbol(String.toLowerCase, Decl(lib.d.ts, --, --))
3636
>s : Symbol(s, Decl(bestChoiceType.ts, 10, 18))
@@ -52,9 +52,9 @@ function f2() {
5252

5353
let z = y.map(s => s.toLowerCase());
5454
>z : Symbol(z, Decl(bestChoiceType.ts, 16, 7))
55-
>y.map : Symbol(Array.map, Decl(lib.d.ts, --, --))
55+
>y.map : Symbol(Array.map, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
5656
>y : Symbol(y, Decl(bestChoiceType.ts, 15, 7))
57-
>map : Symbol(Array.map, Decl(lib.d.ts, --, --))
57+
>map : Symbol(Array.map, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
5858
>s : Symbol(s, Decl(bestChoiceType.ts, 16, 18))
5959
>s.toLowerCase : Symbol(String.toLowerCase, Decl(lib.d.ts, --, --))
6060
>s : Symbol(s, Decl(bestChoiceType.ts, 16, 18))

tests/baselines/reference/bestChoiceType.types

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
(''.match(/ /) || []).map(s => s.toLowerCase());
66
>(''.match(/ /) || []).map(s => s.toLowerCase()) : string[]
7-
>(''.match(/ /) || []).map : <U>(callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any) => U[]
7+
>(''.match(/ /) || []).map : { <U>(this: [string, string, string, string, string], callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): [U, U, U, U, U]; <U>(this: [string, string, string, string], callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): [U, U, U, U]; <U>(this: [string, string, string], callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): [U, U, U]; <U>(this: [string, string], callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): [U, U]; <U>(callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): U[]; }
88
>(''.match(/ /) || []) : RegExpMatchArray
99
>''.match(/ /) || [] : RegExpMatchArray
1010
>''.match(/ /) : RegExpMatchArray | null
@@ -13,7 +13,7 @@
1313
>match : { (regexp: string): RegExpMatchArray | null; (regexp: RegExp): RegExpMatchArray | null; }
1414
>/ / : RegExp
1515
>[] : never[]
16-
>map : <U>(callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any) => U[]
16+
>map : { <U>(this: [string, string, string, string, string], callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): [U, U, U, U, U]; <U>(this: [string, string, string, string], callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): [U, U, U, U]; <U>(this: [string, string, string], callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): [U, U, U]; <U>(this: [string, string], callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): [U, U]; <U>(callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): U[]; }
1717
>s => s.toLowerCase() : (s: string) => string
1818
>s : string
1919
>s.toLowerCase() : string
@@ -43,9 +43,9 @@ function f1() {
4343
let z = y.map(s => s.toLowerCase());
4444
>z : string[]
4545
>y.map(s => s.toLowerCase()) : string[]
46-
>y.map : <U>(callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any) => U[]
46+
>y.map : { <U>(this: [string, string, string, string, string], callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): [U, U, U, U, U]; <U>(this: [string, string, string, string], callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): [U, U, U, U]; <U>(this: [string, string, string], callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): [U, U, U]; <U>(this: [string, string], callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): [U, U]; <U>(callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): U[]; }
4747
>y : RegExpMatchArray
48-
>map : <U>(callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any) => U[]
48+
>map : { <U>(this: [string, string, string, string, string], callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): [U, U, U, U, U]; <U>(this: [string, string, string, string], callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): [U, U, U, U]; <U>(this: [string, string, string], callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): [U, U, U]; <U>(this: [string, string], callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): [U, U]; <U>(callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): U[]; }
4949
>s => s.toLowerCase() : (s: string) => string
5050
>s : string
5151
>s.toLowerCase() : string
@@ -75,9 +75,9 @@ function f2() {
7575
let z = y.map(s => s.toLowerCase());
7676
>z : string[]
7777
>y.map(s => s.toLowerCase()) : string[]
78-
>y.map : <U>(callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any) => U[]
78+
>y.map : { <U>(this: [string, string, string, string, string], callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): [U, U, U, U, U]; <U>(this: [string, string, string, string], callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): [U, U, U, U]; <U>(this: [string, string, string], callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): [U, U, U]; <U>(this: [string, string], callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): [U, U]; <U>(callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): U[]; }
7979
>y : RegExpMatchArray
80-
>map : <U>(callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any) => U[]
80+
>map : { <U>(this: [string, string, string, string, string], callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): [U, U, U, U, U]; <U>(this: [string, string, string, string], callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): [U, U, U, U]; <U>(this: [string, string, string], callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): [U, U, U]; <U>(this: [string, string], callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): [U, U]; <U>(callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any): U[]; }
8181
>s => s.toLowerCase() : (s: string) => string
8282
>s : string
8383
>s.toLowerCase() : string

tests/baselines/reference/commentInMethodCall.symbols

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ var s: string[];
44
>s : Symbol(s, Decl(commentInMethodCall.ts, 1, 3))
55

66
s.map(// do something
7-
>s.map : Symbol(Array.map, Decl(lib.d.ts, --, --))
7+
>s.map : Symbol(Array.map, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
88
>s : Symbol(s, Decl(commentInMethodCall.ts, 1, 3))
9-
>map : Symbol(Array.map, Decl(lib.d.ts, --, --))
9+
>map : Symbol(Array.map, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
1010

1111
function () { });
1212

0 commit comments

Comments
 (0)