From ca44ee8f975b32d275a7f6470f2232fc68cbc8a5 Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Thu, 6 Jun 2019 10:28:42 -0700 Subject: [PATCH 01/36] Update fourslash tests to have semicolons --- .../extract-method-in-anonymous-function-declaration.ts | 2 +- .../fourslash/extract-method_jsxIntrinsicTagSymbol.ts | 2 +- tests/cases/fourslash/refactorExtractType11.ts | 4 ++-- tests/cases/fourslash/refactorExtractType14.ts | 4 ++-- tests/cases/fourslash/refactorExtractType15.ts | 4 ++-- tests/cases/fourslash/refactorExtractType17.ts | 4 ++-- tests/cases/fourslash/refactorExtractType18.ts | 4 ++-- tests/cases/fourslash/refactorExtractType19.ts | 4 ++-- tests/cases/fourslash/refactorExtractType20.ts | 4 ++-- tests/cases/fourslash/refactorExtractType21.ts | 4 ++-- tests/cases/fourslash/refactorExtractType22.ts | 4 ++-- tests/cases/fourslash/refactorExtractType23.ts | 4 ++-- tests/cases/fourslash/refactorExtractType24.ts | 4 ++-- tests/cases/fourslash/refactorExtractType25.ts | 4 ++-- tests/cases/fourslash/refactorExtractType26.ts | 4 ++-- tests/cases/fourslash/refactorExtractType27.ts | 4 ++-- tests/cases/fourslash/refactorExtractType28.ts | 4 ++-- tests/cases/fourslash/refactorExtractType29.ts | 4 ++-- tests/cases/fourslash/refactorExtractType30.ts | 4 ++-- tests/cases/fourslash/refactorExtractType34.ts | 4 ++-- tests/cases/fourslash/refactorExtractType35.ts | 4 ++-- tests/cases/fourslash/refactorExtractType36.ts | 4 ++-- tests/cases/fourslash/refactorExtractType37.ts | 4 ++-- tests/cases/fourslash/refactorExtractType39.ts | 4 ++-- tests/cases/fourslash/refactorExtractType42.ts | 8 ++++---- tests/cases/fourslash/refactorExtractType44.ts | 4 ++-- tests/cases/fourslash/refactorExtractType45.ts | 4 ++-- tests/cases/fourslash/refactorExtractType46.ts | 8 ++++---- tests/cases/fourslash/refactorExtractType49.ts | 8 ++++---- tests/cases/fourslash/refactorExtractType7.ts | 4 ++-- tests/cases/fourslash/refactorExtractType8.ts | 4 ++-- tests/cases/fourslash/refactorExtractType9.ts | 4 ++-- 32 files changed, 68 insertions(+), 68 deletions(-) diff --git a/tests/cases/fourslash/extract-method-in-anonymous-function-declaration.ts b/tests/cases/fourslash/extract-method-in-anonymous-function-declaration.ts index 6566d129874..197ad698088 100644 --- a/tests/cases/fourslash/extract-method-in-anonymous-function-declaration.ts +++ b/tests/cases/fourslash/extract-method-in-anonymous-function-declaration.ts @@ -1,7 +1,7 @@ /// ////export default function() { -//// /*start*/0/*end*/ +//// /*start*/0/*end*/; ////} goTo.select('start', 'end') diff --git a/tests/cases/fourslash/extract-method_jsxIntrinsicTagSymbol.ts b/tests/cases/fourslash/extract-method_jsxIntrinsicTagSymbol.ts index 072fd670ddd..74a6b2fc212 100644 --- a/tests/cases/fourslash/extract-method_jsxIntrinsicTagSymbol.ts +++ b/tests/cases/fourslash/extract-method_jsxIntrinsicTagSymbol.ts @@ -11,5 +11,5 @@ edit.applyRefactor({ refactorName: "Extract Symbol", actionName: "constant_scope_0", actionDescription: "Extract to constant in enclosing scope", - newContent: "const /*RENAME*/newLocal =
;", + newContent: "const /*RENAME*/newLocal =
", }); diff --git a/tests/cases/fourslash/refactorExtractType11.ts b/tests/cases/fourslash/refactorExtractType11.ts index feb5e68c440..7f465bef111 100644 --- a/tests/cases/fourslash/refactorExtractType11.ts +++ b/tests/cases/fourslash/refactorExtractType11.ts @@ -1,7 +1,7 @@ /// //// function foo(a: number, b?: number, ...c: number[]): boolean { -//// return false as /*a*/boolean/*b*/ +//// return false as /*a*/boolean/*b*/; //// } goTo.select("a", "b"); @@ -12,6 +12,6 @@ edit.applyRefactor({ newContent: `function foo(a: number, b?: number, ...c: number[]): boolean { type /*RENAME*/NewType = boolean; - return false as NewType + return false as NewType; }`, }); diff --git a/tests/cases/fourslash/refactorExtractType14.ts b/tests/cases/fourslash/refactorExtractType14.ts index 4d5667bb540..29655086921 100644 --- a/tests/cases/fourslash/refactorExtractType14.ts +++ b/tests/cases/fourslash/refactorExtractType14.ts @@ -1,6 +1,6 @@ /// -//// type A = string | number | T +//// type A = string | number | T; goTo.select("a", "b"); edit.applyRefactor({ @@ -9,5 +9,5 @@ edit.applyRefactor({ actionDescription: "Extract to type alias", newContent: `type /*RENAME*/NewType = boolean; -type A = string | number | T`, +type A = string | number | T;`, }); diff --git a/tests/cases/fourslash/refactorExtractType15.ts b/tests/cases/fourslash/refactorExtractType15.ts index a716f42509a..84a26de6be4 100644 --- a/tests/cases/fourslash/refactorExtractType15.ts +++ b/tests/cases/fourslash/refactorExtractType15.ts @@ -1,6 +1,6 @@ /// -//// type A = /*a*/string/*b*/ | number | T +//// type A = /*a*/string/*b*/ | number | T; goTo.select("a", "b"); edit.applyRefactor({ @@ -9,5 +9,5 @@ edit.applyRefactor({ actionDescription: "Extract to type alias", newContent: `type /*RENAME*/NewType = string; -type A = NewType | number | T`, +type A = NewType | number | T;`, }); diff --git a/tests/cases/fourslash/refactorExtractType17.ts b/tests/cases/fourslash/refactorExtractType17.ts index ae62b402fe3..605fccb25d6 100644 --- a/tests/cases/fourslash/refactorExtractType17.ts +++ b/tests/cases/fourslash/refactorExtractType17.ts @@ -1,6 +1,6 @@ /// -//// type A = string | number | /*a*/T/*b*/ +//// type A = string | number | /*a*/T/*b*/; goTo.select("a", "b"); edit.applyRefactor({ @@ -9,5 +9,5 @@ edit.applyRefactor({ actionDescription: "Extract to type alias", newContent: `type /*RENAME*/NewType = T; -type A = string | number | NewType`, +type A = string | number | NewType;`, }); diff --git a/tests/cases/fourslash/refactorExtractType18.ts b/tests/cases/fourslash/refactorExtractType18.ts index 1ebe8a2b354..310be9b0e28 100644 --- a/tests/cases/fourslash/refactorExtractType18.ts +++ b/tests/cases/fourslash/refactorExtractType18.ts @@ -1,6 +1,6 @@ /// -//// type A = /*a*/Partial/*b*/ & D | C +//// type A = /*a*/Partial/*b*/ & D | C; goTo.select("a", "b"); edit.applyRefactor({ @@ -9,6 +9,6 @@ edit.applyRefactor({ actionDescription: "Extract to type alias", newContent: `type /*RENAME*/NewType = Partial; -type A = NewType & D | C`, +type A = NewType & D | C;`, }); diff --git a/tests/cases/fourslash/refactorExtractType19.ts b/tests/cases/fourslash/refactorExtractType19.ts index 4a982f6899d..4ecd563c7ea 100644 --- a/tests/cases/fourslash/refactorExtractType19.ts +++ b/tests/cases/fourslash/refactorExtractType19.ts @@ -1,6 +1,6 @@ /// -//// type A = /*a*/Partial/*b*/ & D | C +//// type A = /*a*/Partial/*b*/ & D | C; goTo.select("a", "b"); edit.applyRefactor({ @@ -9,6 +9,6 @@ edit.applyRefactor({ actionDescription: "Extract to type alias", newContent: `type /*RENAME*/NewType = Partial; -type A = NewType & D | C`, +type A = NewType & D | C;`, }); diff --git a/tests/cases/fourslash/refactorExtractType20.ts b/tests/cases/fourslash/refactorExtractType20.ts index b31f208704f..2994418355b 100644 --- a/tests/cases/fourslash/refactorExtractType20.ts +++ b/tests/cases/fourslash/refactorExtractType20.ts @@ -1,6 +1,6 @@ /// -//// type A = () => (v: /*a*/T/*b*/) => (v: T) => (v: T) => U +//// type A = () => (v: /*a*/T/*b*/) => (v: T) => (v: T) => U; goTo.select("a", "b"); edit.applyRefactor({ @@ -9,5 +9,5 @@ edit.applyRefactor({ actionDescription: "Extract to type alias", newContent: `type /*RENAME*/NewType = T; -type A = () => (v: NewType) => (v: T) => (v: T) => U`, +type A = () => (v: NewType) => (v: T) => (v: T) => U;`, }); diff --git a/tests/cases/fourslash/refactorExtractType21.ts b/tests/cases/fourslash/refactorExtractType21.ts index e97485c8269..157e38af75e 100644 --- a/tests/cases/fourslash/refactorExtractType21.ts +++ b/tests/cases/fourslash/refactorExtractType21.ts @@ -1,6 +1,6 @@ /// -//// type A = () => (v: T) => (v: /*a*/T/*b*/) => (v: T) => U +//// type A = () => (v: T) => (v: /*a*/T/*b*/) => (v: T) => U; goTo.select("a", "b"); edit.applyRefactor({ @@ -9,5 +9,5 @@ edit.applyRefactor({ actionDescription: "Extract to type alias", newContent: `type /*RENAME*/NewType = T; -type A = () => (v: T) => (v: NewType) => (v: T) => U`, +type A = () => (v: T) => (v: NewType) => (v: T) => U;`, }); diff --git a/tests/cases/fourslash/refactorExtractType22.ts b/tests/cases/fourslash/refactorExtractType22.ts index f7282df4ef7..16344397db6 100644 --- a/tests/cases/fourslash/refactorExtractType22.ts +++ b/tests/cases/fourslash/refactorExtractType22.ts @@ -1,6 +1,6 @@ /// -//// type A = () => (v: T) => (v: T) => (v: /*a*/T/*b*/) => U +//// type A = () => (v: T) => (v: T) => (v: /*a*/T/*b*/) => U; goTo.select("a", "b"); edit.applyRefactor({ @@ -9,5 +9,5 @@ edit.applyRefactor({ actionDescription: "Extract to type alias", newContent: `type /*RENAME*/NewType = T; -type A = () => (v: T) => (v: T) => (v: NewType) => U`, +type A = () => (v: T) => (v: T) => (v: NewType) => U;`, }); diff --git a/tests/cases/fourslash/refactorExtractType23.ts b/tests/cases/fourslash/refactorExtractType23.ts index 9e219dd3383..ea8082a3b2a 100644 --- a/tests/cases/fourslash/refactorExtractType23.ts +++ b/tests/cases/fourslash/refactorExtractType23.ts @@ -1,6 +1,6 @@ /// -//// type A = () => (v: T) => (v: T) => (v: T) => /*a*/U/*b*/ +//// type A = () => (v: T) => (v: T) => (v: T) => /*a*/U/*b*/; goTo.select("a", "b"); edit.applyRefactor({ @@ -9,5 +9,5 @@ edit.applyRefactor({ actionDescription: "Extract to type alias", newContent: `type /*RENAME*/NewType = U; -type A = () => (v: T) => (v: T) => (v: T) => NewType`, +type A = () => (v: T) => (v: T) => (v: T) => NewType;`, }); diff --git a/tests/cases/fourslash/refactorExtractType24.ts b/tests/cases/fourslash/refactorExtractType24.ts index 54b36acb252..98f3edecc67 100644 --- a/tests/cases/fourslash/refactorExtractType24.ts +++ b/tests/cases/fourslash/refactorExtractType24.ts @@ -1,6 +1,6 @@ /// -//// type A = () => (v: T) => (v: T) => /*a*/(v: T) => U/*b*/ +//// type A = () => (v: T) => (v: T) => /*a*/(v: T) => U/*b*/; goTo.select("a", "b"); edit.applyRefactor({ @@ -9,5 +9,5 @@ edit.applyRefactor({ actionDescription: "Extract to type alias", newContent: `type /*RENAME*/NewType = (v: T) => U; -type A = () => (v: T) => (v: T) => NewType`, +type A = () => (v: T) => (v: T) => NewType;`, }); diff --git a/tests/cases/fourslash/refactorExtractType25.ts b/tests/cases/fourslash/refactorExtractType25.ts index b09d04912c1..9ad43742111 100644 --- a/tests/cases/fourslash/refactorExtractType25.ts +++ b/tests/cases/fourslash/refactorExtractType25.ts @@ -1,6 +1,6 @@ /// -//// type A = () => (v: T) => /*a*/(v: T) => (v: T) => U/*b*/ +//// type A = () => (v: T) => /*a*/(v: T) => (v: T) => U/*b*/; goTo.select("a", "b"); edit.applyRefactor({ @@ -9,5 +9,5 @@ edit.applyRefactor({ actionDescription: "Extract to type alias", newContent: `type /*RENAME*/NewType = (v: T) => (v: T) => U; -type A = () => (v: T) => NewType`, +type A = () => (v: T) => NewType;`, }); diff --git a/tests/cases/fourslash/refactorExtractType26.ts b/tests/cases/fourslash/refactorExtractType26.ts index 662ce7eb8dc..2dffef7e9ac 100644 --- a/tests/cases/fourslash/refactorExtractType26.ts +++ b/tests/cases/fourslash/refactorExtractType26.ts @@ -1,6 +1,6 @@ /// -//// type A = () => /*a*/(v: T) => (v: T) => (v: T) => U/*b*/ +//// type A = () => /*a*/(v: T) => (v: T) => (v: T) => U/*b*/; goTo.select("a", "b"); edit.applyRefactor({ @@ -9,5 +9,5 @@ edit.applyRefactor({ actionDescription: "Extract to type alias", newContent: `type /*RENAME*/NewType = (v: T) => (v: T) => (v: T) => U; -type A = () => NewType`, +type A = () => NewType;`, }); diff --git a/tests/cases/fourslash/refactorExtractType27.ts b/tests/cases/fourslash/refactorExtractType27.ts index 5163fd2d480..e9c8d05601c 100644 --- a/tests/cases/fourslash/refactorExtractType27.ts +++ b/tests/cases/fourslash/refactorExtractType27.ts @@ -1,6 +1,6 @@ /// -//// type A = /*a*/() => (v: T) => (v: T) => (v: T) => U/*b*/ +//// type A = /*a*/() => (v: T) => (v: T) => (v: T) => U/*b*/; goTo.select("a", "b"); edit.applyRefactor({ @@ -9,5 +9,5 @@ edit.applyRefactor({ actionDescription: "Extract to type alias", newContent: `type /*RENAME*/NewType = () => (v: T) => (v: T) => (v: T) => U; -type A = NewType`, +type A = NewType;`, }); diff --git a/tests/cases/fourslash/refactorExtractType28.ts b/tests/cases/fourslash/refactorExtractType28.ts index 81d1356ca21..4e53e463a90 100644 --- a/tests/cases/fourslash/refactorExtractType28.ts +++ b/tests/cases/fourslash/refactorExtractType28.ts @@ -1,6 +1,6 @@ /// -//// type Item = /*a*/T/*b*/ extends (infer P)[] ? P : never +//// type Item = /*a*/T/*b*/ extends (infer P)[] ? P : never; goTo.select("a", "b"); edit.applyRefactor({ @@ -9,5 +9,5 @@ edit.applyRefactor({ actionDescription: "Extract to type alias", newContent: `type /*RENAME*/NewType = T; -type Item = NewType extends (infer P)[] ? P : never`, +type Item = NewType extends (infer P)[] ? P : never;`, }); diff --git a/tests/cases/fourslash/refactorExtractType29.ts b/tests/cases/fourslash/refactorExtractType29.ts index a1fb2ac405c..29fd2ec7e61 100644 --- a/tests/cases/fourslash/refactorExtractType29.ts +++ b/tests/cases/fourslash/refactorExtractType29.ts @@ -1,6 +1,6 @@ /// -//// type Item = T extends (infer P)[] ? /*a*/P/*b*/ : never +//// type Item = T extends (infer P)[] ? /*a*/P/*b*/ : never; goTo.select("a", "b"); edit.applyRefactor({ @@ -9,5 +9,5 @@ edit.applyRefactor({ actionDescription: "Extract to type alias", newContent: `type /*RENAME*/NewType

= P; -type Item = T extends (infer P)[] ? NewType

: never`, +type Item = T extends (infer P)[] ? NewType

: never;`, }); diff --git a/tests/cases/fourslash/refactorExtractType30.ts b/tests/cases/fourslash/refactorExtractType30.ts index a0684cabb53..a3943d32128 100644 --- a/tests/cases/fourslash/refactorExtractType30.ts +++ b/tests/cases/fourslash/refactorExtractType30.ts @@ -1,6 +1,6 @@ /// -//// type Item = T extends (infer P)[] ? P : /*a*/never/*b*/ +//// type Item = T extends (infer P)[] ? P : /*a*/never/*b*/; goTo.select("a", "b"); edit.applyRefactor({ @@ -9,5 +9,5 @@ edit.applyRefactor({ actionDescription: "Extract to type alias", newContent: `type /*RENAME*/NewType = never; -type Item = T extends (infer P)[] ? P : NewType`, +type Item = T extends (infer P)[] ? P : NewType;`, }); diff --git a/tests/cases/fourslash/refactorExtractType34.ts b/tests/cases/fourslash/refactorExtractType34.ts index 114d08a09a6..45b4c116549 100644 --- a/tests/cases/fourslash/refactorExtractType34.ts +++ b/tests/cases/fourslash/refactorExtractType34.ts @@ -1,6 +1,6 @@ /// -//// type Item = /*a*/T extends (infer P)[] ? P : never/*b*/ +//// type Item = /*a*/T extends (infer P)[] ? P : never/*b*/; goTo.select("a", "b"); edit.applyRefactor({ @@ -9,5 +9,5 @@ edit.applyRefactor({ actionDescription: "Extract to type alias", newContent: `type /*RENAME*/NewType = T extends (infer P)[] ? P : never; -type Item = NewType`, +type Item = NewType;`, }); diff --git a/tests/cases/fourslash/refactorExtractType35.ts b/tests/cases/fourslash/refactorExtractType35.ts index 8ace9f929b8..979918e13e8 100644 --- a/tests/cases/fourslash/refactorExtractType35.ts +++ b/tests/cases/fourslash/refactorExtractType35.ts @@ -1,6 +1,6 @@ /// -//// type Union = /*a*/U | T/*b*/ +//// type Union = /*a*/U | T/*b*/; goTo.select("a", "b"); edit.applyRefactor({ @@ -9,5 +9,5 @@ edit.applyRefactor({ actionDescription: "Extract to type alias", newContent: `type /*RENAME*/NewType = U | T; -type Union = NewType`, +type Union = NewType;`, }); diff --git a/tests/cases/fourslash/refactorExtractType36.ts b/tests/cases/fourslash/refactorExtractType36.ts index 5086bf130ce..e36983e7440 100644 --- a/tests/cases/fourslash/refactorExtractType36.ts +++ b/tests/cases/fourslash/refactorExtractType36.ts @@ -1,6 +1,6 @@ /// -//// type A = (v: /*a*/string | number/*b*/) => v is string +//// type A = (v: /*a*/string | number/*b*/) => v is string; goTo.select("a", "b"); edit.applyRefactor({ @@ -9,6 +9,6 @@ edit.applyRefactor({ actionDescription: "Extract to type alias", newContent: `type /*RENAME*/NewType = string | number; -type A = (v: NewType) => v is string`, +type A = (v: NewType) => v is string;`, }); diff --git a/tests/cases/fourslash/refactorExtractType37.ts b/tests/cases/fourslash/refactorExtractType37.ts index b24e219b3e4..d3c9514e4d2 100644 --- a/tests/cases/fourslash/refactorExtractType37.ts +++ b/tests/cases/fourslash/refactorExtractType37.ts @@ -1,6 +1,6 @@ /// -//// type A = (v: string | number) => v is /*a*/string/*b*/ +//// type A = (v: string | number) => v is /*a*/string/*b*/; goTo.select("a", "b"); edit.applyRefactor({ @@ -9,5 +9,5 @@ edit.applyRefactor({ actionDescription: "Extract to type alias", newContent: `type /*RENAME*/NewType = string; -type A = (v: string | number) => v is NewType`, +type A = (v: string | number) => v is NewType;`, }); diff --git a/tests/cases/fourslash/refactorExtractType39.ts b/tests/cases/fourslash/refactorExtractType39.ts index 1f55dcee39a..d5a96889304 100644 --- a/tests/cases/fourslash/refactorExtractType39.ts +++ b/tests/cases/fourslash/refactorExtractType39.ts @@ -1,6 +1,6 @@ /// -//// type A = /*a*/(v: string | number) => v is string/*b*/ +//// type A = /*a*/(v: string | number) => v is string/*b*/; goTo.select("a", "b"); edit.applyRefactor({ @@ -9,5 +9,5 @@ edit.applyRefactor({ actionDescription: "Extract to type alias", newContent: `type /*RENAME*/NewType = (v: string | number) => v is string; -type A = NewType`, +type A = NewType;`, }); diff --git a/tests/cases/fourslash/refactorExtractType42.ts b/tests/cases/fourslash/refactorExtractType42.ts index 29692ab06e6..67b6dc51875 100644 --- a/tests/cases/fourslash/refactorExtractType42.ts +++ b/tests/cases/fourslash/refactorExtractType42.ts @@ -1,15 +1,15 @@ /// -//// const a = 1 -//// type A = (v: string | number) => /*a*/typeof a/*b*/ +//// const a = 1; +//// type A = (v: string | number) => /*a*/typeof a/*b*/; goTo.select("a", "b"); edit.applyRefactor({ refactorName: "Extract type", actionName: "Extract to type alias", actionDescription: "Extract to type alias", - newContent: `const a = 1 + newContent: `const a = 1; type /*RENAME*/NewType = typeof a; -type A = (v: string | number) => NewType`, +type A = (v: string | number) => NewType;`, }); diff --git a/tests/cases/fourslash/refactorExtractType44.ts b/tests/cases/fourslash/refactorExtractType44.ts index 22e1a9172dc..e570c9d60e9 100644 --- a/tests/cases/fourslash/refactorExtractType44.ts +++ b/tests/cases/fourslash/refactorExtractType44.ts @@ -1,6 +1,6 @@ /// -//// type A = /*a*/B.C.D/*b*/ +//// type A = /*a*/B.C.D/*b*/; goTo.select("a", "b"); edit.applyRefactor({ @@ -9,5 +9,5 @@ edit.applyRefactor({ actionDescription: "Extract to type alias", newContent: `type /*RENAME*/NewType = B.C.D; -type A = NewType`, +type A = NewType;`, }); diff --git a/tests/cases/fourslash/refactorExtractType45.ts b/tests/cases/fourslash/refactorExtractType45.ts index 60d9d77bc29..bfc3288e587 100644 --- a/tests/cases/fourslash/refactorExtractType45.ts +++ b/tests/cases/fourslash/refactorExtractType45.ts @@ -1,6 +1,6 @@ /// -//// type A = /*a*/B.C.D/*b*/ +//// type A = /*a*/B.C.D/*b*/; goTo.select("a", "b"); edit.applyRefactor({ @@ -9,5 +9,5 @@ edit.applyRefactor({ actionDescription: "Extract to type alias", newContent: `type /*RENAME*/NewType = B.C.D; -type A = NewType`, +type A = NewType;`, }); diff --git a/tests/cases/fourslash/refactorExtractType46.ts b/tests/cases/fourslash/refactorExtractType46.ts index ddcfa4878c9..0f244f0ec02 100644 --- a/tests/cases/fourslash/refactorExtractType46.ts +++ b/tests/cases/fourslash/refactorExtractType46.ts @@ -1,15 +1,15 @@ /// -//// namespace A { export const b = 1 } -//// function a(b: string): /*a*/typeof A.b/*b*/ { return 1 } +//// namespace A { export const b = 1; } +//// function a(b: string): /*a*/typeof A.b/*b*/ { return 1; } goTo.select("a", "b"); edit.applyRefactor({ refactorName: "Extract type", actionName: "Extract to type alias", actionDescription: "Extract to type alias", - newContent: `namespace A { export const b = 1 } + newContent: `namespace A { export const b = 1; } type /*RENAME*/NewType = typeof A.b; -function a(b: string): NewType { return 1 }`, +function a(b: string): NewType { return 1; }`, }); diff --git a/tests/cases/fourslash/refactorExtractType49.ts b/tests/cases/fourslash/refactorExtractType49.ts index 7d965ee3d09..96429a91881 100644 --- a/tests/cases/fourslash/refactorExtractType49.ts +++ b/tests/cases/fourslash/refactorExtractType49.ts @@ -1,15 +1,15 @@ /// -//// type A = T -//// type B = /*a*/A/*b*/ +//// type A = T; +//// type B = /*a*/A/*b*/; goTo.select("a", "b"); edit.applyRefactor({ refactorName: "Extract type", actionName: "Extract to type alias", actionDescription: "Extract to type alias", - newContent: `type A = T + newContent: `type A = T; type /*RENAME*/NewType = A; -type B = NewType`, +type B = NewType;`, }); diff --git a/tests/cases/fourslash/refactorExtractType7.ts b/tests/cases/fourslash/refactorExtractType7.ts index a5b1f4c7dd0..d1a40f83579 100644 --- a/tests/cases/fourslash/refactorExtractType7.ts +++ b/tests/cases/fourslash/refactorExtractType7.ts @@ -1,7 +1,7 @@ /// //// function foo(a: /*a*/number/*b*/, b?: number, ...c: number[]): boolean { -//// return false as boolean +//// return false as boolean; //// } goTo.select("a", "b"); @@ -12,6 +12,6 @@ edit.applyRefactor({ newContent: `type /*RENAME*/NewType = number; function foo(a: NewType, b?: number, ...c: number[]): boolean { - return false as boolean + return false as boolean; }`, }); diff --git a/tests/cases/fourslash/refactorExtractType8.ts b/tests/cases/fourslash/refactorExtractType8.ts index 61121c67374..c13e68e10f5 100644 --- a/tests/cases/fourslash/refactorExtractType8.ts +++ b/tests/cases/fourslash/refactorExtractType8.ts @@ -1,7 +1,7 @@ /// //// function foo(a: number, b?: /*a*/number/*b*/, ...c: number[]): boolean { -//// return false as boolean +//// return false as boolean; //// } goTo.select("a", "b"); @@ -12,6 +12,6 @@ edit.applyRefactor({ newContent: `type /*RENAME*/NewType = number; function foo(a: number, b?: NewType, ...c: number[]): boolean { - return false as boolean + return false as boolean; }`, }); diff --git a/tests/cases/fourslash/refactorExtractType9.ts b/tests/cases/fourslash/refactorExtractType9.ts index 921f2a005a5..49a5f737ee9 100644 --- a/tests/cases/fourslash/refactorExtractType9.ts +++ b/tests/cases/fourslash/refactorExtractType9.ts @@ -1,7 +1,7 @@ /// //// function foo(a: number, b?: number, ...c: /*a*/number[]/*b*/): boolean { -//// return false as boolean +//// return false as boolean; //// } goTo.select("a", "b"); @@ -12,6 +12,6 @@ edit.applyRefactor({ newContent: `type /*RENAME*/NewType = number[]; function foo(a: number, b?: number, ...c: NewType): boolean { - return false as boolean + return false as boolean; }`, }); From 7815778fb053e453e17f83442fc45261937b3bb0 Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Thu, 6 Jun 2019 10:48:26 -0700 Subject: [PATCH 02/36] =?UTF-8?q?Update=20fourslash=20tests=20that=20shoul?= =?UTF-8?q?dn=E2=80=99t=20insert=20semicolons?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../completionsImport_default_anonymous.ts | 28 +++++++++---------- ...ompletionsImport_exportEquals_anonymous.ts | 2 +- .../extract-method_jsxIntrinsicTagSymbol.ts | 2 +- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/tests/cases/fourslash/completionsImport_default_anonymous.ts b/tests/cases/fourslash/completionsImport_default_anonymous.ts index a1eb5da6490..80ad6494dc6 100644 --- a/tests/cases/fourslash/completionsImport_default_anonymous.ts +++ b/tests/cases/fourslash/completionsImport_default_anonymous.ts @@ -14,25 +14,25 @@ goTo.marker("0"); const preferences: FourSlashInterface.UserPreferences = { includeCompletionsForModuleExports: true }; verify.completions( - { + { marker: "0", exact: [ - completion.globalThisEntry, - completion.undefinedVarEntry, - ...completion.statementKeywordsWithTypes - ], - preferences + completion.globalThisEntry, + completion.undefinedVarEntry, + ...completion.statementKeywordsWithTypes + ], + preferences }, { marker: "1", includes: { - name: "fooBar", - source: "/src/foo-bar", - sourceDisplay: "./foo-bar", - text: "(property) default: 0", - kind: "property", - hasAction: true, - sortText: completion.SortText.AutoImportSuggestions + name: "fooBar", + source: "/src/foo-bar", + sourceDisplay: "./foo-bar", + text: "(property) default: 0", + kind: "property", + hasAction: true, + sortText: completion.SortText.AutoImportSuggestions }, preferences, }, @@ -41,7 +41,7 @@ verify.applyCodeActionFromCompletion("1", { name: "fooBar", source: "/src/foo-bar", description: `Import default 'fooBar' from module "./foo-bar"`, - newFileContent: `import fooBar from "./foo-bar"; + newFileContent: `import fooBar from "./foo-bar" def fooB`, diff --git a/tests/cases/fourslash/completionsImport_exportEquals_anonymous.ts b/tests/cases/fourslash/completionsImport_exportEquals_anonymous.ts index b28de47c69d..e8d675cba8b 100644 --- a/tests/cases/fourslash/completionsImport_exportEquals_anonymous.ts +++ b/tests/cases/fourslash/completionsImport_exportEquals_anonymous.ts @@ -38,7 +38,7 @@ verify.applyCodeActionFromCompletion("0", { name: "fooBar", source: "/src/foo-bar", description: `Import 'fooBar' from module "./foo-bar"`, - newFileContent: `import fooBar = require("./foo-bar"); + newFileContent: `import fooBar = require("./foo-bar") exp fooB`, diff --git a/tests/cases/fourslash/extract-method_jsxIntrinsicTagSymbol.ts b/tests/cases/fourslash/extract-method_jsxIntrinsicTagSymbol.ts index 74a6b2fc212..072fd670ddd 100644 --- a/tests/cases/fourslash/extract-method_jsxIntrinsicTagSymbol.ts +++ b/tests/cases/fourslash/extract-method_jsxIntrinsicTagSymbol.ts @@ -11,5 +11,5 @@ edit.applyRefactor({ refactorName: "Extract Symbol", actionName: "constant_scope_0", actionDescription: "Extract to constant in enclosing scope", - newContent: "const /*RENAME*/newLocal =

", + newContent: "const /*RENAME*/newLocal =
;", }); From b37875ff7aac7c85e1a3a4859c6589ef8d50e4cf Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Thu, 6 Jun 2019 10:49:09 -0700 Subject: [PATCH 03/36] Detect semicolons in file before writing quick fixes --- src/services/textChanges.ts | 234 ++++++++++++++++++++---------------- src/services/utilities.ts | 47 ++++++++ 2 files changed, 177 insertions(+), 104 deletions(-) diff --git a/src/services/textChanges.ts b/src/services/textChanges.ts index 81441627635..c55a08808a9 100644 --- a/src/services/textChanges.ts +++ b/src/services/textChanges.ts @@ -834,9 +834,10 @@ namespace ts.textChanges { /** Note: output node may be mutated input node. */ export function getNonformattedText(node: Node, sourceFile: SourceFile | undefined, newLineCharacter: string): { text: string, node: Node } { - const writer = new Writer(newLineCharacter); + const omitTrailingSemicolon = !!sourceFile && !probablyUsesSemicolons(sourceFile); + const writer = createWriter(newLineCharacter, omitTrailingSemicolon); const newLine = newLineCharacter === "\n" ? NewLineKind.LineFeed : NewLineKind.CarriageReturnLineFeed; - createPrinter({ newLine, neverAsciiEscape: true }, writer).writeNode(EmitHint.Unspecified, node, sourceFile, writer); + createPrinter({ newLine, neverAsciiEscape: true, omitTrailingSemicolon }, writer).writeNode(EmitHint.Unspecified, node, sourceFile, writer); return { text: writer.getText(), node: assignPositionsToNode(node) }; } } @@ -874,143 +875,168 @@ namespace ts.textChanges { return nodeArray; } - class Writer implements EmitTextWriter, PrintHandlers { - private lastNonTriviaPosition = 0; - private readonly writer: EmitTextWriter; + interface TextChangesWriter extends EmitTextWriter, PrintHandlers {} - public readonly onEmitNode: PrintHandlers["onEmitNode"]; - public readonly onBeforeEmitNodeArray: PrintHandlers["onBeforeEmitNodeArray"]; - public readonly onAfterEmitNodeArray: PrintHandlers["onAfterEmitNodeArray"]; - public readonly onBeforeEmitToken: PrintHandlers["onBeforeEmitToken"]; - public readonly onAfterEmitToken: PrintHandlers["onAfterEmitToken"]; + function createWriter(newLine: string, omitTrailingSemicolon?: boolean): TextChangesWriter { + let lastNonTriviaPosition = 0; - constructor(newLine: string) { - this.writer = createTextWriter(newLine); - this.onEmitNode = (hint, node, printCallback) => { - if (node) { - setPos(node, this.lastNonTriviaPosition); - } - printCallback(hint, node); - if (node) { - setEnd(node, this.lastNonTriviaPosition); - } - }; - this.onBeforeEmitNodeArray = nodes => { - if (nodes) { - setPos(nodes, this.lastNonTriviaPosition); - } - }; - this.onAfterEmitNodeArray = nodes => { - if (nodes) { - setEnd(nodes, this.lastNonTriviaPosition); - } - }; - this.onBeforeEmitToken = node => { - if (node) { - setPos(node, this.lastNonTriviaPosition); - } - }; - this.onAfterEmitToken = node => { - if (node) { - setEnd(node, this.lastNonTriviaPosition); - } - }; - } - private setLastNonTriviaPosition(s: string, force: boolean) { + const writer = omitTrailingSemicolon ? getTrailingSemicolonOmittingWriter(createTextWriter(newLine)) : createTextWriter(newLine); + const onEmitNode: PrintHandlers["onEmitNode"] = (hint, node, printCallback) => { + if (node) { + setPos(node, lastNonTriviaPosition); + } + printCallback(hint, node); + if (node) { + setEnd(node, lastNonTriviaPosition); + } + }; + const onBeforeEmitNodeArray: PrintHandlers["onBeforeEmitNodeArray"] = nodes => { + if (nodes) { + setPos(nodes, lastNonTriviaPosition); + } + }; + const onAfterEmitNodeArray: PrintHandlers["onAfterEmitNodeArray"] = nodes => { + if (nodes) { + setEnd(nodes, lastNonTriviaPosition); + } + }; + const onBeforeEmitToken: PrintHandlers["onBeforeEmitToken"] = node => { + if (node) { + setPos(node, lastNonTriviaPosition); + } + }; + const onAfterEmitToken: PrintHandlers["onAfterEmitToken"] = node => { + if (node) { + setEnd(node, lastNonTriviaPosition); + } + }; + + function setLastNonTriviaPosition(s: string, force: boolean) { if (force || !isTrivia(s)) { - this.lastNonTriviaPosition = this.writer.getTextPos(); + lastNonTriviaPosition = writer.getTextPos(); let i = 0; while (isWhiteSpaceLike(s.charCodeAt(s.length - i - 1))) { i++; } // trim trailing whitespaces - this.lastNonTriviaPosition -= i; + lastNonTriviaPosition -= i; } } - write(s: string): void { - this.writer.write(s); - this.setLastNonTriviaPosition(s, /*force*/ false); + function write(s: string): void { + writer.write(s); + setLastNonTriviaPosition(s, /*force*/ false); } - writeComment(s: string): void { - this.writer.writeComment(s); + function writeComment(s: string): void { + writer.writeComment(s); } - writeKeyword(s: string): void { - this.writer.writeKeyword(s); - this.setLastNonTriviaPosition(s, /*force*/ false); + function writeKeyword(s: string): void { + writer.writeKeyword(s); + setLastNonTriviaPosition(s, /*force*/ false); } - writeOperator(s: string): void { - this.writer.writeOperator(s); - this.setLastNonTriviaPosition(s, /*force*/ false); + function writeOperator(s: string): void { + writer.writeOperator(s); + setLastNonTriviaPosition(s, /*force*/ false); } - writePunctuation(s: string): void { - this.writer.writePunctuation(s); - this.setLastNonTriviaPosition(s, /*force*/ false); + function writePunctuation(s: string): void { + writer.writePunctuation(s); + setLastNonTriviaPosition(s, /*force*/ false); } - writeTrailingSemicolon(s: string): void { - this.writer.writeTrailingSemicolon(s); - this.setLastNonTriviaPosition(s, /*force*/ false); + function writeTrailingSemicolon(s: string): void { + writer.writeTrailingSemicolon(s); + setLastNonTriviaPosition(s, /*force*/ false); } - writeParameter(s: string): void { - this.writer.writeParameter(s); - this.setLastNonTriviaPosition(s, /*force*/ false); + function writeParameter(s: string): void { + writer.writeParameter(s); + setLastNonTriviaPosition(s, /*force*/ false); } - writeProperty(s: string): void { - this.writer.writeProperty(s); - this.setLastNonTriviaPosition(s, /*force*/ false); + function writeProperty(s: string): void { + writer.writeProperty(s); + setLastNonTriviaPosition(s, /*force*/ false); } - writeSpace(s: string): void { - this.writer.writeSpace(s); - this.setLastNonTriviaPosition(s, /*force*/ false); + function writeSpace(s: string): void { + writer.writeSpace(s); + setLastNonTriviaPosition(s, /*force*/ false); } - writeStringLiteral(s: string): void { - this.writer.writeStringLiteral(s); - this.setLastNonTriviaPosition(s, /*force*/ false); + function writeStringLiteral(s: string): void { + writer.writeStringLiteral(s); + setLastNonTriviaPosition(s, /*force*/ false); } - writeSymbol(s: string, sym: Symbol): void { - this.writer.writeSymbol(s, sym); - this.setLastNonTriviaPosition(s, /*force*/ false); + function writeSymbol(s: string, sym: Symbol): void { + writer.writeSymbol(s, sym); + setLastNonTriviaPosition(s, /*force*/ false); } - writeLine(): void { - this.writer.writeLine(); + function writeLine(): void { + writer.writeLine(); } - increaseIndent(): void { - this.writer.increaseIndent(); + function increaseIndent(): void { + writer.increaseIndent(); } - decreaseIndent(): void { - this.writer.decreaseIndent(); + function decreaseIndent(): void { + writer.decreaseIndent(); } - getText(): string { - return this.writer.getText(); + function getText(): string { + return writer.getText(); } - rawWrite(s: string): void { - this.writer.rawWrite(s); - this.setLastNonTriviaPosition(s, /*force*/ false); + function rawWrite(s: string): void { + writer.rawWrite(s); + setLastNonTriviaPosition(s, /*force*/ false); } - writeLiteral(s: string): void { - this.writer.writeLiteral(s); - this.setLastNonTriviaPosition(s, /*force*/ true); + function writeLiteral(s: string): void { + writer.writeLiteral(s); + setLastNonTriviaPosition(s, /*force*/ true); } - getTextPos(): number { - return this.writer.getTextPos(); + function getTextPos(): number { + return writer.getTextPos(); } - getLine(): number { - return this.writer.getLine(); + function getLine(): number { + return writer.getLine(); } - getColumn(): number { - return this.writer.getColumn(); + function getColumn(): number { + return writer.getColumn(); } - getIndent(): number { - return this.writer.getIndent(); + function getIndent(): number { + return writer.getIndent(); } - isAtStartOfLine(): boolean { - return this.writer.isAtStartOfLine(); + function isAtStartOfLine(): boolean { + return writer.isAtStartOfLine(); } - clear(): void { - this.writer.clear(); - this.lastNonTriviaPosition = 0; + function clear(): void { + writer.clear(); + lastNonTriviaPosition = 0; } + + return { + onEmitNode, + onBeforeEmitNodeArray, + onAfterEmitNodeArray, + onBeforeEmitToken, + onAfterEmitToken, + write, + writeComment, + writeKeyword, + writeOperator, + writePunctuation, + writeTrailingSemicolon, + writeParameter, + writeProperty, + writeSpace, + writeStringLiteral, + writeSymbol, + writeLine, + increaseIndent, + decreaseIndent, + getText, + rawWrite, + writeLiteral, + getTextPos, + getLine, + getColumn, + getIndent, + isAtStartOfLine, + clear + }; } function getInsertionPositionAtSourceFileTop(sourceFile: SourceFile): number { diff --git a/src/services/utilities.ts b/src/services/utilities.ts index 5506b45d380..4c6549b002c 100644 --- a/src/services/utilities.ts +++ b/src/services/utilities.ts @@ -1991,4 +1991,51 @@ namespace ts { }); return typeIsAccessible ? res : undefined; } + + export function syntaxUsuallyHasTrailingSemicolon(kind: SyntaxKind) { + return kind === SyntaxKind.VariableStatement + || kind === SyntaxKind.ExpressionStatement + || kind === SyntaxKind.DoStatement + || kind === SyntaxKind.ContinueStatement + || kind === SyntaxKind.BreakStatement + || kind === SyntaxKind.ReturnStatement + || kind === SyntaxKind.ThrowStatement + || kind === SyntaxKind.DebuggerStatement + || kind === SyntaxKind.PropertyDeclaration + || kind === SyntaxKind.TypeAliasDeclaration + || kind === SyntaxKind.ImportDeclaration + || kind === SyntaxKind.ImportEqualsDeclaration + || kind === SyntaxKind.ExportDeclaration; + } + + export function probablyUsesSemicolons(sourceFile: SourceFile): boolean { + let withSemicolon = 0; + let withoutSemicolon = 0; + const nStatementsToObserve = 5; + forEachChild(sourceFile, function visit(node): boolean | undefined { + if (syntaxUsuallyHasTrailingSemicolon(node.kind)) { + const lastToken = node.getLastToken(sourceFile); + if (lastToken && lastToken.kind === SyntaxKind.SemicolonToken) { + withSemicolon++; + } + else { + withoutSemicolon++; + } + } + if (withSemicolon + withoutSemicolon >= nStatementsToObserve) { + return true; + } + + return forEachChild(node, visit); + }); + + // One statement missing a semicolon isn’t sufficient evidence to say the user + // doesn’t want semicolons, because they may not even be done writing that statement. + if (withSemicolon === 0 && withoutSemicolon <= 1) { + return true; + } + + // If even 2/5 places have a semicolon, the user probably wants semicolons + return withSemicolon / withoutSemicolon > 1 / nStatementsToObserve; + } } From 6282c9fb5e2097c86f44ee67da872423df1c1d5c Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Thu, 6 Jun 2019 10:55:56 -0700 Subject: [PATCH 04/36] Add test for semicolon detection in auto-import --- .../completionsImport_noSemicolons.ts | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 tests/cases/fourslash/completionsImport_noSemicolons.ts diff --git a/tests/cases/fourslash/completionsImport_noSemicolons.ts b/tests/cases/fourslash/completionsImport_noSemicolons.ts new file mode 100644 index 00000000000..f1e183b8b3c --- /dev/null +++ b/tests/cases/fourslash/completionsImport_noSemicolons.ts @@ -0,0 +1,20 @@ +/// + +// @Filename: /a.ts +////export function foo() {} + +// @Filename: /b.ts +////const x = 0 +////const y = 1 +////const z = fo/**/ + +verify.applyCodeActionFromCompletion("", { + name: "foo", + source: "/a", + description: `Import 'foo' from module "./a"`, + newFileContent: `import { foo } from "./a" + +const x = 0 +const y = 1 +const z = fo`, +}); From b6c415485a4ef95f118926e922c064ca394a80a8 Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Fri, 14 Jun 2019 15:42:29 -0700 Subject: [PATCH 05/36] Add failing test for smartSelect string literals --- tests/cases/fourslash/smartSelection_stringLiteral.ts | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 tests/cases/fourslash/smartSelection_stringLiteral.ts diff --git a/tests/cases/fourslash/smartSelection_stringLiteral.ts b/tests/cases/fourslash/smartSelection_stringLiteral.ts new file mode 100644 index 00000000000..3dcae459ebf --- /dev/null +++ b/tests/cases/fourslash/smartSelection_stringLiteral.ts @@ -0,0 +1,6 @@ +/// + +//// const a = 'a'; +//// const b = /**/'b'; + +verify.baselineSmartSelection(); From 54f5f2baf26cf247145026ecb8c63fe23b4aa578 Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Fri, 14 Jun 2019 15:50:09 -0700 Subject: [PATCH 06/36] Fix smartSelection returning extra span inside string quotes when cursor is outside them --- src/services/smartSelection.ts | 8 ++++++-- .../reference/smartSelection_stringLiteral.baseline | 10 ++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 tests/baselines/reference/smartSelection_stringLiteral.baseline diff --git a/src/services/smartSelection.ts b/src/services/smartSelection.ts index ddd3c75c2c7..d0423ce031e 100644 --- a/src/services/smartSelection.ts +++ b/src/services/smartSelection.ts @@ -72,9 +72,13 @@ namespace ts.SmartSelectionRange { function pushSelectionRange(start: number, end: number): void { // Skip empty ranges if (start !== end) { - // Skip ranges that are identical to the parent const textSpan = createTextSpanFromBounds(start, end); - if (!selectionRange || !textSpansEqual(textSpan, selectionRange.textSpan)) { + if (!selectionRange || ( + // Skip ranges that are identical to the parent + !textSpansEqual(textSpan, selectionRange.textSpan) && + // Skip ranges that don’t contain the original position + textSpanIntersectsWithPosition(textSpan, pos) + )) { selectionRange = { textSpan, ...selectionRange && { parent: selectionRange } }; } } diff --git a/tests/baselines/reference/smartSelection_stringLiteral.baseline b/tests/baselines/reference/smartSelection_stringLiteral.baseline new file mode 100644 index 00000000000..4e062d162ce --- /dev/null +++ b/tests/baselines/reference/smartSelection_stringLiteral.baseline @@ -0,0 +1,10 @@ +const a = 'a'; +const b = /**/'b'; + + + 'b' + +const b = 'b'; + +const a = 'a'; +const b = 'b'; \ No newline at end of file From 7bbd2992268589d47b4061abf88508a21c9b5aa7 Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Mon, 24 Jun 2019 15:19:43 -0700 Subject: [PATCH 07/36] Look at properties of constraint-instantiated optional mapped types when deciding assignability --- src/compiler/checker.ts | 8 +- ...nalNoInfiniteInstantiationDepth.errors.txt | 170 ++++++++++++------ .../mappedTypeRelationships.errors.txt | 6 + .../reference/mappedTypeRelationships.js | 15 ++ .../reference/mappedTypeRelationships.symbols | 19 ++ .../reference/mappedTypeRelationships.types | 15 ++ ...ferredInferenceAllowsAssignment.errors.txt | 170 ++++++++++++------ .../types/mapped/mappedTypeRelationships.ts | 6 + 8 files changed, 293 insertions(+), 116 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index a3abe1dc5b5..8feb1d4a412 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -13200,14 +13200,14 @@ namespace ts { if (!isGenericMappedType(source)) { const targetConstraint = getConstraintTypeFromMappedType(target); const sourceKeys = getIndexType(source, /*stringsOnly*/ undefined, /*noIndexSignatures*/ true); - const hasOptionalUnionKeys = modifiers & MappedTypeModifiers.IncludeOptional && targetConstraint.flags & TypeFlags.Union; - const filteredByApplicability = hasOptionalUnionKeys ? filterType(targetConstraint, t => !!isRelatedTo(t, sourceKeys)) : undefined; + const includeOptional = modifiers & MappedTypeModifiers.IncludeOptional; + const filteredByApplicability = includeOptional ? filterType(getLiteralTypeFromProperties(target, TypeFlags.StringOrNumberLiteralOrUnique), t => !!isRelatedTo(t, sourceKeys)) : undefined; // A source type T is related to a target type { [P in Q]: X } if Q is related to keyof T and T[Q] is related to X. // A source type T is related to a target type { [P in Q]?: X } if some constituent Q' of Q is related to keyof T and T[Q'] is related to X. - if (hasOptionalUnionKeys + if (includeOptional ? !(filteredByApplicability!.flags & TypeFlags.Never) : isRelatedTo(targetConstraint, sourceKeys)) { - const indexingType = hasOptionalUnionKeys ? filteredByApplicability! : getTypeParameterFromMappedType(target); + const indexingType = filteredByApplicability || getTypeParameterFromMappedType(target); const indexedAccessType = getIndexedAccessType(source, indexingType); const templateType = getTemplateTypeFromMappedType(target); if (result = isRelatedTo(indexedAccessType, templateType, reportErrors)) { diff --git a/tests/baselines/reference/circularlyConstrainedMappedTypeContainingConditionalNoInfiniteInstantiationDepth.errors.txt b/tests/baselines/reference/circularlyConstrainedMappedTypeContainingConditionalNoInfiniteInstantiationDepth.errors.txt index 74835c4a55b..2c5fc84b37c 100644 --- a/tests/baselines/reference/circularlyConstrainedMappedTypeContainingConditionalNoInfiniteInstantiationDepth.errors.txt +++ b/tests/baselines/reference/circularlyConstrainedMappedTypeContainingConditionalNoInfiniteInstantiationDepth.errors.txt @@ -4,35 +4,64 @@ tests/cases/compiler/circularlyConstrainedMappedTypeContainingConditionalNoInfin Type 'P extends keyof TInjectedProps ? TInjectedProps[P] extends GetProps[P] ? GetProps[P] : TInjectedProps[P] : GetProps[P]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. Type 'GetProps[P] | (TInjectedProps[P] extends GetProps[P] ? GetProps[P] : TInjectedProps[P])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. Type 'GetProps[P]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'GetProps[P]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>] : GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'GetProps[Extract>] | (TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type '(Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type '(TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]) | GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[keyof TInjectedProps & Extract>] | GetProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'GetProps[keyof GetProps & string] | (TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[P]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>] : GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'GetProps[Extract>] | (TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'GetProps[Extract>] | GetProps[Extract>] | GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[Extract>] | GetProps[Extract>] | GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. Type 'GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'GetProps[string] | (TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'P extends keyof TInjectedProps ? TInjectedProps[P] extends GetProps[P] ? GetProps[P] : TInjectedProps[P] : GetProps[P]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type '(Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type '(TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]) | GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[keyof TInjectedProps & Extract>] | GetProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type '(TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]) | GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] | GetProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type '(TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string]) | GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[keyof TInjectedProps & string] | GetProps[keyof TInjectedProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[keyof TInjectedProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'TInjectedProps[keyof TInjectedProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'P extends keyof TInjectedProps ? TInjectedProps[P] extends GetProps[P] ? GetProps[P] : TInjectedProps[P] : GetProps[P]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. ==== tests/cases/compiler/circularlyConstrainedMappedTypeContainingConditionalNoInfiniteInstantiationDepth.ts (1 errors) ==== @@ -106,33 +135,62 @@ tests/cases/compiler/circularlyConstrainedMappedTypeContainingConditionalNoInfin !!! error TS2344: Type 'P extends keyof TInjectedProps ? TInjectedProps[P] extends GetProps[P] ? GetProps[P] : TInjectedProps[P] : GetProps[P]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. !!! error TS2344: Type 'GetProps[P] | (TInjectedProps[P] extends GetProps[P] ? GetProps[P] : TInjectedProps[P])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. !!! error TS2344: Type 'GetProps[P]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'GetProps[P]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>] : GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'GetProps[Extract>] | (TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type '(Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type '(TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]) | GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>] | GetProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'GetProps[keyof GetProps & string] | (TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[P]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>] : GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'GetProps[Extract>] | (TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'GetProps[Extract>] | GetProps[Extract>] | GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[Extract>] | GetProps[Extract>] | GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. !!! error TS2344: Type 'GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'GetProps[string] | (TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'P extends keyof TInjectedProps ? TInjectedProps[P] extends GetProps[P] ? GetProps[P] : TInjectedProps[P] : GetProps[P]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type '(Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type '(TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]) | GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>] | GetProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type '(TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]) | GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] | GetProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type '(TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string]) | GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & string] | GetProps[keyof TInjectedProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'P extends keyof TInjectedProps ? TInjectedProps[P] extends GetProps[P] ? GetProps[P] : TInjectedProps[P] : GetProps[P]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. \ No newline at end of file diff --git a/tests/baselines/reference/mappedTypeRelationships.errors.txt b/tests/baselines/reference/mappedTypeRelationships.errors.txt index 6e76eb4721c..8f33c7414b1 100644 --- a/tests/baselines/reference/mappedTypeRelationships.errors.txt +++ b/tests/baselines/reference/mappedTypeRelationships.errors.txt @@ -386,4 +386,10 @@ tests/cases/conformance/types/mapped/mappedTypeRelationships.ts(168,5): error TS function f82(t: T, k1: K1, k2: K2): Partial { return t[k1][k2]; } + + // #31070 + type Numeric = { [K in keyof T]?: number }; + function f90() { + const n: Numeric = { x: 1 }; + } \ No newline at end of file diff --git a/tests/baselines/reference/mappedTypeRelationships.js b/tests/baselines/reference/mappedTypeRelationships.js index 8bd44da5658..ea448f5fb92 100644 --- a/tests/baselines/reference/mappedTypeRelationships.js +++ b/tests/baselines/reference/mappedTypeRelationships.js @@ -180,6 +180,12 @@ function f81(t: T, k: K): Partial { function f82(t: T, k1: K1, k2: K2): Partial { return t[k1][k2]; } + +// #31070 +type Numeric = { [K in keyof T]?: number }; +function f90() { + const n: Numeric = { x: 1 }; +} //// [mappedTypeRelationships.js] @@ -310,6 +316,9 @@ function f81(t, k) { function f82(t, k1, k2) { return t[k1][k2]; } +function f90() { + var n = { x: 1 }; +} //// [mappedTypeRelationships.d.ts] @@ -393,3 +402,9 @@ declare function f76(x: { declare function f80(t: T): Partial; declare function f81(t: T, k: K): Partial; declare function f82(t: T, k1: K1, k2: K2): Partial; +declare type Numeric = { + [K in keyof T]?: number; +}; +declare function f90(): void; diff --git a/tests/baselines/reference/mappedTypeRelationships.symbols b/tests/baselines/reference/mappedTypeRelationships.symbols index 39d82b5b857..c70cf1c07a0 100644 --- a/tests/baselines/reference/mappedTypeRelationships.symbols +++ b/tests/baselines/reference/mappedTypeRelationships.symbols @@ -805,3 +805,22 @@ function f82(t: T, k1: K1, k2: K2 >k2 : Symbol(k2, Decl(mappedTypeRelationships.ts, 178, 73)) } +// #31070 +type Numeric = { [K in keyof T]?: number }; +>Numeric : Symbol(Numeric, Decl(mappedTypeRelationships.ts, 180, 1)) +>T : Symbol(T, Decl(mappedTypeRelationships.ts, 183, 13)) +>K : Symbol(K, Decl(mappedTypeRelationships.ts, 183, 21)) +>T : Symbol(T, Decl(mappedTypeRelationships.ts, 183, 13)) + +function f90() { +>f90 : Symbol(f90, Decl(mappedTypeRelationships.ts, 183, 46)) +>T : Symbol(T, Decl(mappedTypeRelationships.ts, 184, 13)) +>x : Symbol(x, Decl(mappedTypeRelationships.ts, 184, 24)) + + const n: Numeric = { x: 1 }; +>n : Symbol(n, Decl(mappedTypeRelationships.ts, 185, 9)) +>Numeric : Symbol(Numeric, Decl(mappedTypeRelationships.ts, 180, 1)) +>T : Symbol(T, Decl(mappedTypeRelationships.ts, 184, 13)) +>x : Symbol(x, Decl(mappedTypeRelationships.ts, 185, 27)) +} + diff --git a/tests/baselines/reference/mappedTypeRelationships.types b/tests/baselines/reference/mappedTypeRelationships.types index 0922ee18340..b130e05bfa5 100644 --- a/tests/baselines/reference/mappedTypeRelationships.types +++ b/tests/baselines/reference/mappedTypeRelationships.types @@ -653,3 +653,18 @@ function f82(t: T, k1: K1, k2: K2 >k2 : K2 } +// #31070 +type Numeric = { [K in keyof T]?: number }; +>Numeric : Numeric + +function f90() { +>f90 : () => void +>x : number + + const n: Numeric = { x: 1 }; +>n : Numeric +>{ x: 1 } : { x: number; } +>x : number +>1 : 1 +} + diff --git a/tests/baselines/reference/reactReduxLikeDeferredInferenceAllowsAssignment.errors.txt b/tests/baselines/reference/reactReduxLikeDeferredInferenceAllowsAssignment.errors.txt index 8c7e2f57eda..6267b5299ad 100644 --- a/tests/baselines/reference/reactReduxLikeDeferredInferenceAllowsAssignment.errors.txt +++ b/tests/baselines/reference/reactReduxLikeDeferredInferenceAllowsAssignment.errors.txt @@ -4,35 +4,64 @@ tests/cases/compiler/reactReduxLikeDeferredInferenceAllowsAssignment.ts(76,50): Type 'P extends keyof TInjectedProps ? TInjectedProps[P] extends GetProps[P] ? GetProps[P] : TInjectedProps[P] : GetProps[P]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. Type 'GetProps[P] | (TInjectedProps[P] extends GetProps[P] ? GetProps[P] : TInjectedProps[P])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. Type 'GetProps[P]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'GetProps[P]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>] : GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'GetProps[Extract>] | (TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type '(Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type '(TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]) | GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[keyof TInjectedProps & Extract>] | GetProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'GetProps[keyof GetProps & string] | (TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[P]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>] : GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'GetProps[Extract>] | (TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'GetProps[Extract>] | GetProps[Extract>] | GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[Extract>] | GetProps[Extract>] | GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. Type 'GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'GetProps[string] | (TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'P extends keyof TInjectedProps ? TInjectedProps[P] extends GetProps[P] ? GetProps[P] : TInjectedProps[P] : GetProps[P]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type '(Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type '(TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]) | GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[keyof TInjectedProps & Extract>] | GetProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type '(TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]) | GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] | GetProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type '(TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string]) | GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[keyof TInjectedProps & string] | GetProps[keyof TInjectedProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[keyof TInjectedProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'TInjectedProps[keyof TInjectedProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'P extends keyof TInjectedProps ? TInjectedProps[P] extends GetProps[P] ? GetProps[P] : TInjectedProps[P] : GetProps[P]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. ==== tests/cases/compiler/reactReduxLikeDeferredInferenceAllowsAssignment.ts (1 errors) ==== @@ -119,35 +148,64 @@ tests/cases/compiler/reactReduxLikeDeferredInferenceAllowsAssignment.ts(76,50): !!! error TS2344: Type 'P extends keyof TInjectedProps ? TInjectedProps[P] extends GetProps[P] ? GetProps[P] : TInjectedProps[P] : GetProps[P]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. !!! error TS2344: Type 'GetProps[P] | (TInjectedProps[P] extends GetProps[P] ? GetProps[P] : TInjectedProps[P])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. !!! error TS2344: Type 'GetProps[P]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'GetProps[P]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>] : GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'GetProps[Extract>] | (TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type '(Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type '(TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]) | GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>] | GetProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'GetProps[keyof GetProps & string] | (TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[P]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>] : GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'GetProps[Extract>] | (TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'GetProps[Extract>] | GetProps[Extract>] | GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[Extract>] | GetProps[Extract>] | GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. !!! error TS2344: Type 'GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'GetProps[string] | (TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'P extends keyof TInjectedProps ? TInjectedProps[P] extends GetProps[P] ? GetProps[P] : TInjectedProps[P] : GetProps[P]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type '(Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type '(TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]) | GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>] | GetProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type '(TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]) | GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] | GetProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type '(TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string]) | GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & string] | GetProps[keyof TInjectedProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'P extends keyof TInjectedProps ? TInjectedProps[P] extends GetProps[P] ? GetProps[P] : TInjectedProps[P] : GetProps[P]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. >; declare const connect: { diff --git a/tests/cases/conformance/types/mapped/mappedTypeRelationships.ts b/tests/cases/conformance/types/mapped/mappedTypeRelationships.ts index 9e8639bbb9e..f140d84687a 100644 --- a/tests/cases/conformance/types/mapped/mappedTypeRelationships.ts +++ b/tests/cases/conformance/types/mapped/mappedTypeRelationships.ts @@ -182,3 +182,9 @@ function f81(t: T, k: K): Partial { function f82(t: T, k1: K1, k2: K2): Partial { return t[k1][k2]; } + +// #31070 +type Numeric = { [K in keyof T]?: number }; +function f90() { + const n: Numeric = { x: 1 }; +} From 49e3f1788641fe3709644f5644048a00a3fea43b Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Mon, 24 Jun 2019 17:11:16 -1000 Subject: [PATCH 08/36] Add instantiation count limiter --- src/compiler/checker.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 9cb08b3e440..f4eb3940e1e 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -65,6 +65,7 @@ namespace ts { let typeCount = 0; let symbolCount = 0; let enumCount = 0; + let instantiationCount = 0; let instantiationDepth = 0; let constraintDepth = 0; let currentNode: Node | undefined; @@ -11408,13 +11409,14 @@ namespace ts { if (!type || !mapper || mapper === identityMapper) { return type; } - if (instantiationDepth === 50) { + if (instantiationDepth === 50 || instantiationCount >= 5000000) { // We have reached 50 recursive type instantiations and there is a very high likelyhood we're dealing // with a combination of infinite generic types that perpetually generate new type identities. We stop // the recursion here by yielding the error type. error(currentNode, Diagnostics.Type_instantiation_is_excessively_deep_and_possibly_infinite); return errorType; } + instantiationCount++; instantiationDepth++; const result = instantiateTypeWorker(type, mapper); instantiationDepth--; @@ -24494,6 +24496,7 @@ namespace ts { function checkExpression(node: Expression | QualifiedName, checkMode?: CheckMode, forceTuple?: boolean): Type { const saveCurrentNode = currentNode; currentNode = node; + instantiationCount = 0; const uninstantiatedType = checkExpressionWorker(node, checkMode, forceTuple); const type = instantiateTypeWithSingleGenericCallSignature(node, uninstantiatedType, checkMode); if (isConstEnumObjectType(type)) { @@ -29204,6 +29207,7 @@ namespace ts { if (node) { const saveCurrentNode = currentNode; currentNode = node; + instantiationCount = 0; checkSourceElementWorker(node); currentNode = saveCurrentNode; } @@ -29475,6 +29479,7 @@ namespace ts { function checkDeferredNode(node: Node) { const saveCurrentNode = currentNode; currentNode = node; + instantiationCount = 0; switch (node.kind) { case SyntaxKind.FunctionExpression: case SyntaxKind.ArrowFunction: From 3e49556a88de19e3460727b8b447e1789a08ef98 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Tue, 25 Jun 2019 12:15:04 -0700 Subject: [PATCH 09/36] Watch generated file if it doesnt exist when trying to translate it to to source generated position --- src/server/editorServices.ts | 8 +- src/server/project.ts | 100 ++++++++++++ src/server/utilities.ts | 1 + .../unittests/tsserver/projectReferences.ts | 146 +++++++++++------- .../reference/api/tsserverlibrary.d.ts | 4 + 5 files changed, 201 insertions(+), 58 deletions(-) diff --git a/src/server/editorServices.ts b/src/server/editorServices.ts index 4e5435feaba..10a7b667009 100644 --- a/src/server/editorServices.ts +++ b/src/server/editorServices.ts @@ -2234,7 +2234,13 @@ namespace ts.server { getDocumentPositionMapper(project: Project, generatedFileName: string, sourceFileName?: string): DocumentPositionMapper | undefined { // Since declaration info and map file watches arent updating project's directory structure host (which can cache file structure) use host const declarationInfo = this.getOrCreateScriptInfoNotOpenedByClient(generatedFileName, project.currentDirectory, this.host); - if (!declarationInfo) return undefined; + if (!declarationInfo) { + if (sourceFileName) { + // Project contains source file and it generates the generated file name + project.addGeneratedFileWatch(generatedFileName, sourceFileName); + } + return undefined; + } // Try to get from cache declarationInfo.getSnapshot(); // Ensure synchronized diff --git a/src/server/project.ts b/src/server/project.ts index d1605e22d1d..32a1d8f53b2 100644 --- a/src/server/project.ts +++ b/src/server/project.ts @@ -109,12 +109,22 @@ namespace ts.server { return value instanceof ScriptInfo; } + interface GeneratedFileWatcher { + generatedFilePath: Path; + watcher: FileWatcher; + } + type GeneratedFileWatcherMap = GeneratedFileWatcher | Map; + function isGeneratedFileWatcher(watch: GeneratedFileWatcherMap): watch is GeneratedFileWatcher { + return (watch as GeneratedFileWatcher).generatedFilePath !== undefined; + } + export abstract class Project implements LanguageServiceHost, ModuleResolutionHost { private rootFiles: ScriptInfo[] = []; private rootFilesMap: Map = createMap(); private program: Program | undefined; private externalFiles: SortedReadonlyArray | undefined; private missingFilesMap: Map | undefined; + private generatedFilesMap: GeneratedFileWatcherMap | undefined; private plugins: PluginModuleWithName[] = []; /*@internal*/ @@ -568,6 +578,7 @@ namespace ts.server { this.lastFileExceededProgramSize = lastFileExceededProgramSize; this.builderState = undefined; this.resolutionCache.closeTypeRootsWatch(); + this.clearGeneratedFileWatch(); this.projectService.onUpdateLanguageServiceStateForProject(this, /*languageServiceEnabled*/ false); } @@ -649,6 +660,7 @@ namespace ts.server { clearMap(this.missingFilesMap, closeFileWatcher); this.missingFilesMap = undefined!; } + this.clearGeneratedFileWatch(); // signal language service to release source files acquired from document registry this.languageService.dispose(); @@ -942,6 +954,39 @@ namespace ts.server { missingFilePath => this.addMissingFileWatcher(missingFilePath) ); + if (this.generatedFilesMap) { + const outPath = this.compilerOptions.outFile && this.compilerOptions.out; + if (isGeneratedFileWatcher(this.generatedFilesMap)) { + // --out + if (!outPath || !this.isValidGeneratedFileWatcher( + removeFileExtension(outPath) + Extension.Dts, + this.generatedFilesMap, + )) { + this.clearGeneratedFileWatch(); + } + } + else { + // MultiFile + if (outPath) { + this.clearGeneratedFileWatch(); + } + else { + this.generatedFilesMap.forEach((watcher, source) => { + const sourceFile = this.program!.getSourceFileByPath(source as Path); + if (!sourceFile || + sourceFile.resolvedPath !== source || + !this.isValidGeneratedFileWatcher( + getDeclarationEmitOutputFilePathWorker(sourceFile.fileName, this.compilerOptions, this.currentDirectory, this.program!.getCommonSourceDirectory(), this.getCanonicalFileName), + watcher + )) { + closeFileWatcherOf(watcher); + (this.generatedFilesMap as Map).delete(source); + } + }); + } + } + } + // Watch the type locations that would be added to program as part of automatic type resolutions if (this.languageServiceEnabled) { this.resolutionCache.updateTypeRootsWatch(); @@ -1006,6 +1051,61 @@ namespace ts.server { return !!this.missingFilesMap && this.missingFilesMap.has(path); } + /* @internal */ + addGeneratedFileWatch(generatedFile: string, sourceFile: string) { + if (this.compilerOptions.outFile || this.compilerOptions.out) { + // Single watcher + if (!this.generatedFilesMap) { + this.generatedFilesMap = this.createGeneratedFileWatcher(generatedFile); + } + } + else { + // Map + const path = this.toPath(sourceFile); + if (this.generatedFilesMap) { + if (isGeneratedFileWatcher(this.generatedFilesMap)) { + Debug.fail(`${this.projectName} Expected not to have --out watcher for generated file with options: ${JSON.stringify(this.compilerOptions)}`); + return; + } + if (this.generatedFilesMap.has(path)) return; + } + else { + this.generatedFilesMap = createMap(); + } + this.generatedFilesMap.set(path, this.createGeneratedFileWatcher(generatedFile)); + } + } + + private createGeneratedFileWatcher(generatedFile: string): GeneratedFileWatcher { + return { + generatedFilePath: this.toPath(generatedFile), + watcher: this.projectService.watchFactory.watchFile( + this.projectService.host, + generatedFile, + () => this.projectService.delayUpdateProjectGraphAndEnsureProjectStructureForOpenFiles(this), + PollingInterval.High, + WatchType.MissingGeneratedFile, + this + ) + }; + } + + private isValidGeneratedFileWatcher(generateFile: string, watcher: GeneratedFileWatcher) { + return this.toPath(generateFile) === watcher.generatedFilePath; + } + + private clearGeneratedFileWatch() { + if (this.generatedFilesMap) { + if (isGeneratedFileWatcher(this.generatedFilesMap)) { + closeFileWatcherOf(this.generatedFilesMap); + } + else { + clearMap(this.generatedFilesMap, closeFileWatcherOf); + } + this.generatedFilesMap = undefined; + } + } + getScriptInfoForNormalizedPath(fileName: NormalizedPath): ScriptInfo | undefined { const scriptInfo = this.projectService.getScriptInfoForPath(this.toPath(fileName)); if (scriptInfo && !scriptInfo.isAttached(this)) { diff --git a/src/server/utilities.ts b/src/server/utilities.ts index 91880ccfdbe..fd38c6a4326 100644 --- a/src/server/utilities.ts +++ b/src/server/utilities.ts @@ -227,5 +227,6 @@ namespace ts { NodeModulesForClosedScriptInfo = "node_modules for closed script infos in them", MissingSourceMapFile = "Missing source map file", NoopConfigFileForInferredRoot = "Noop Config file for the inferred project root", + MissingGeneratedFile = "Missing generated file" } } diff --git a/src/testRunner/unittests/tsserver/projectReferences.ts b/src/testRunner/unittests/tsserver/projectReferences.ts index 1b2e90bcd4f..79e8ad5ebb0 100644 --- a/src/testRunner/unittests/tsserver/projectReferences.ts +++ b/src/testRunner/unittests/tsserver/projectReferences.ts @@ -94,6 +94,7 @@ namespace ts.projectSystem { describe("with main and depedency project", () => { const projectLocation = "/user/username/projects/myproject"; const dependecyLocation = `${projectLocation}/dependency`; + const dependecyDeclsLocation = `${projectLocation}/decls`; const mainLocation = `${projectLocation}/main`; const dependencyTs: File = { path: `${dependecyLocation}/FnS.ts`, @@ -106,7 +107,7 @@ export function fn5() { } }; const dependencyConfig: File = { path: `${dependecyLocation}/tsconfig.json`, - content: JSON.stringify({ compilerOptions: { composite: true, declarationMap: true } }) + content: JSON.stringify({ compilerOptions: { composite: true, declarationMap: true, declarationDir: "../decls" } }) }; const mainTs: File = { @@ -117,7 +118,7 @@ export function fn5() { } fn3, fn4, fn5 -} from '../dependency/fns' +} from '../decls/fns' fn1(); fn2(); @@ -142,9 +143,9 @@ fn5(); path: `${projectLocation}/random/tsconfig.json`, content: "{}" }; - const dtsLocation = `${dependecyLocation}/FnS.d.ts`; + const dtsLocation = `${dependecyDeclsLocation}/FnS.d.ts`; const dtsPath = dtsLocation.toLowerCase() as Path; - const dtsMapLocation = `${dtsLocation}.map`; + const dtsMapLocation = `${dependecyDeclsLocation}/FnS.d.ts.map`; const dtsMapPath = dtsMapLocation.toLowerCase() as Path; const files = [dependencyTs, dependencyConfig, mainTs, mainConfig, libFile, randomFile, randomConfig]; @@ -217,7 +218,7 @@ fn5(); start: { line: fn + 1, offset: 5 }, end: { line: fn + 1, offset: 8 }, contextStart: { line: 1, offset: 1 }, - contextEnd: { line: 7, offset: 27 } + contextEnd: { line: 7, offset: 22 } }; } function usageSpan(fn: number): protocol.TextSpan { @@ -287,19 +288,25 @@ fn5(); function verifyDocumentPositionMapperUpdates( mainScenario: string, verifier: ReadonlyArray, - closedInfos: ReadonlyArray) { + closedInfos: ReadonlyArray, + withRefs: boolean) { const openFiles = verifier.map(v => v.openFile); const expectedProjectActualFiles = verifier.map(v => v.expectedProjectActualFiles); - const actionGetters = verifier.map(v => v.actionGetter); const openFileLastLines = verifier.map(v => v.openFileLastLine); const configFiles = openFiles.map(openFile => `${getDirectoryPath(openFile.path)}/tsconfig.json`); const openInfos = openFiles.map(f => f.path); // When usage and dependency are used, dependency config is part of closedInfo so ignore - const otherWatchedFiles = verifier.length > 1 ? [configFiles[0]] : configFiles; + const otherWatchedFiles = withRefs && verifier.length > 1 ? [configFiles[0]] : configFiles; function openTsFile(onHostCreate?: (host: TestServerHost) => void) { const host = createHost(files, [mainConfig.path]); + if (!withRefs) { + // Erase project reference + host.writeFile(mainConfig.path, JSON.stringify({ + compilerOptions: { composite: true, declarationMap: true } + })); + } if (onHostCreate) { onHostCreate(host); } @@ -336,7 +343,7 @@ fn5(); ); } - function verifyInfosWhenNoDtsFile(session: TestSession, host: TestServerHost, dependencyTsAndMapOk?: true) { + function verifyInfosWhenNoDtsFile(session: TestSession, host: TestServerHost, watchDts: boolean, dependencyTsAndMapOk?: true) { const dtsMapClosedInfo = firstDefined(closedInfos, f => f.toLowerCase() === dtsMapPath ? f : undefined); const dtsClosedInfo = firstDefined(closedInfos, f => f.toLowerCase() === dtsPath ? f : undefined); verifyInfosWithRandom( @@ -344,8 +351,7 @@ fn5(); host, openInfos, closedInfos.filter(f => (dependencyTsAndMapOk || f !== dtsMapClosedInfo) && f !== dtsClosedInfo && (dependencyTsAndMapOk || f !== dependencyTs.path)), - // When project actual file contains dts, it needs to be watched - dtsClosedInfo && expectedProjectActualFiles.some(expectedProjectActualFiles => expectedProjectActualFiles.some(f => f.toLowerCase() === dtsPath)) ? + dtsClosedInfo && watchDts ? otherWatchedFiles.concat(dtsClosedInfo) : otherWatchedFiles ); @@ -361,22 +367,22 @@ fn5(); } } - function action(actionGetter: SessionActionGetter, fn: number, session: TestSession) { - const { reqName, request, expectedResponse, expectedResponseNoMap, expectedResponseNoDts } = actionGetter(fn); + function action(verifier: DocumentPositionMapperVerifier, fn: number, session: TestSession) { + const { reqName, request, expectedResponse, expectedResponseNoMap, expectedResponseNoDts } = verifier.actionGetter(fn); const { response } = session.executeCommandSeq(request); - return { reqName, response, expectedResponse, expectedResponseNoMap, expectedResponseNoDts }; + return { reqName, response, expectedResponse, expectedResponseNoMap, expectedResponseNoDts, verifier }; } function firstAction(session: TestSession) { - actionGetters.forEach(actionGetter => action(actionGetter, 1, session)); + verifier.forEach(v => action(v, 1, session)); } function verifyAllFnActionWorker(session: TestSession, verifyAction: (result: ReturnType, dtsInfo: server.ScriptInfo | undefined, isFirst: boolean) => void, dtsAbsent?: true) { // action let isFirst = true; - for (const actionGetter of actionGetters) { + for (const v of verifier) { for (let fn = 1; fn <= 5; fn++) { - const result = action(actionGetter, fn, session); + const result = action(v, fn, session); const dtsInfo = session.getProjectService().filenameToScriptInfo.get(dtsPath); if (dtsAbsent) { assert.isUndefined(dtsInfo); @@ -449,9 +455,17 @@ fn5(); dependencyTsAndMapOk?: true ) { // action - verifyAllFnActionWorker(session, ({ reqName, response, expectedResponse, expectedResponseNoDts }) => { + verifyAllFnActionWorker(session, ({ reqName, response, expectedResponse, expectedResponseNoDts, verifier }) => { assert.deepEqual(response, expectedResponseNoDts || expectedResponse, `Failed on ${reqName}`); - verifyInfosWhenNoDtsFile(session, host, dependencyTsAndMapOk); + verifyInfosWhenNoDtsFile( + session, + host, + // Even when project actual file contains dts, its not watched because the dts is in another folder and module resolution just fails + // instead of succeeding to source file and then mapping using project reference (When using usage location) + // But watched if sourcemapper is in source project since we need to keep track of dts to update the source mapper for any potential usages + verifier.expectedProjectActualFiles.every(f => f.toLowerCase() !== dtsPath), + dependencyTsAndMapOk, + ); }, /*dtsAbsent*/ true); } @@ -535,7 +549,11 @@ fn5(); // Collecting at this point retains dependency.d.ts and map watcher closeFilesForSession([randomFile], session); openFilesForSession([randomFile], session); - verifyInfosWhenNoDtsFile(session, host); + verifyInfosWhenNoDtsFile( + session, + host, + !!forEach(verifier, v => v.expectedProjectActualFiles.every(f => f.toLowerCase() !== dtsPath)) + ); // Closing open file, removes dependencies too closeFilesForSession([...openFiles, randomFile], session); @@ -616,7 +634,7 @@ fn5(); "when dependency file's map changes", host => host.writeFile( dtsMapLocation, - `{"version":3,"file":"FnS.d.ts","sourceRoot":"","sources":["FnS.ts"],"names":[],"mappings":"AAAA,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,eAAO,MAAM,CAAC,KAAK,CAAC"}` + `{"version":3,"file":"FnS.d.ts","sourceRoot":"","sources":["../dependency/FnS.ts"],"names":[],"mappings":"AAAA,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,eAAO,MAAM,CAAC,KAAK,CAAC"}` ), /*afterActionDocumentPositionMapperNotEquals*/ true ); @@ -635,44 +653,58 @@ fn5(); ); } - const usageVerifier: DocumentPositionMapperVerifier = { - openFile: mainTs, - expectedProjectActualFiles: [mainTs.path, libFile.path, mainConfig.path, dtsPath], - actionGetter: gotoDefintinionFromMainTs, - openFileLastLine: 14 - }; - describe("from project that uses dependency", () => { - const closedInfos = [dependencyTs.path, dependencyConfig.path, libFile.path, dtsPath, dtsMapLocation]; - verifyDocumentPositionMapperUpdates( - "can go to definition correctly", - [usageVerifier], - closedInfos - ); - }); + function verifyScenarios(withRefs: boolean) { + describe(withRefs ? "when main tsconfig has project reference" : "when main tsconfig doesnt have project reference", () => { + const usageVerifier: DocumentPositionMapperVerifier = { + openFile: mainTs, + expectedProjectActualFiles: [mainTs.path, libFile.path, mainConfig.path, dtsPath], + actionGetter: gotoDefintinionFromMainTs, + openFileLastLine: 14 + }; + describe("from project that uses dependency", () => { + const closedInfos = withRefs ? + [dependencyTs.path, dependencyConfig.path, libFile.path, dtsPath, dtsMapLocation] : + [dependencyTs.path, libFile.path, dtsPath, dtsMapLocation]; + verifyDocumentPositionMapperUpdates( + "can go to definition correctly", + [usageVerifier], + closedInfos, + withRefs + ); + }); - const definingVerifier: DocumentPositionMapperVerifier = { - openFile: dependencyTs, - expectedProjectActualFiles: [dependencyTs.path, libFile.path, dependencyConfig.path], - actionGetter: renameFromDependencyTs, - openFileLastLine: 6 - }; - describe("from defining project", () => { - const closedInfos = [libFile.path, dtsLocation, dtsMapLocation]; - verifyDocumentPositionMapperUpdates( - "rename locations from dependency", - [definingVerifier], - closedInfos - ); - }); + const definingVerifier: DocumentPositionMapperVerifier = { + openFile: dependencyTs, + expectedProjectActualFiles: [dependencyTs.path, libFile.path, dependencyConfig.path], + actionGetter: renameFromDependencyTs, + openFileLastLine: 6, + }; + describe("from defining project", () => { + const closedInfos = [libFile.path, dtsLocation, dtsMapLocation]; + verifyDocumentPositionMapperUpdates( + "rename locations from dependency", + [definingVerifier], + closedInfos, + withRefs + ); + }); - describe("when opening depedency and usage project", () => { - const closedInfos = [libFile.path, dtsPath, dtsMapLocation, dependencyConfig.path]; - verifyDocumentPositionMapperUpdates( - "goto Definition in usage and rename locations from defining project", - [usageVerifier, { ...definingVerifier, actionGetter: renameFromDependencyTsWithBothProjectsOpen }], - closedInfos - ); - }); + describe("when opening depedency and usage project", () => { + const closedInfos = withRefs ? + [libFile.path, dtsPath, dtsMapLocation, dependencyConfig.path] : + [libFile.path, dtsPath, dtsMapLocation]; + verifyDocumentPositionMapperUpdates( + "goto Definition in usage and rename locations from defining project", + [usageVerifier, { ...definingVerifier, actionGetter: renameFromDependencyTsWithBothProjectsOpen }], + closedInfos, + withRefs + ); + }); + }); + } + + verifyScenarios(/*withRefs*/ false); + verifyScenarios(/*withRefs*/ true); }); }); } diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index 82ab70b6e6f..e0f55481c5b 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -8397,6 +8397,7 @@ declare namespace ts.server { private program; private externalFiles; private missingFilesMap; + private generatedFilesMap; private plugins; private lastFileExceededProgramSize; protected languageService: LanguageService; @@ -8509,6 +8510,9 @@ declare namespace ts.server { private detachScriptInfoFromProject; private addMissingFileWatcher; private isWatchedMissingFile; + private createGeneratedFileWatcher; + private isValidGeneratedFileWatcher; + private clearGeneratedFileWatch; getScriptInfoForNormalizedPath(fileName: NormalizedPath): ScriptInfo | undefined; getScriptInfo(uncheckedFileName: string): ScriptInfo | undefined; filesToString(writeProjectFileNames: boolean): string; From 17f6f77de5dc6629b487d4a9d060b48811e46882 Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Wed, 26 Jun 2019 11:49:45 -0700 Subject: [PATCH 10/36] Fix declaration emit for negative number property declarations --- src/compiler/checker.ts | 3 +++ .../computedPropertyNamesDeclarationEmit6_ES5.ts | 5 +++++ .../computedPropertyNamesDeclarationEmit6_ES6.ts | 5 +++++ 3 files changed, 13 insertions(+) create mode 100644 tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit6_ES5.ts create mode 100644 tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit6_ES6.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 64bf09d8b37..61bdee79e39 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -4652,6 +4652,9 @@ namespace ts { if (!isIdentifierText(name, compilerOptions.target) && !isNumericLiteralName(name)) { return `"${escapeString(name, CharacterCodes.doubleQuote)}"`; } + if (isNumericLiteralName(name) && startsWith(name, "-")) { + return `[${name}]`; + } return name; } if (nameType.flags & TypeFlags.UniqueESSymbol) { diff --git a/tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit6_ES5.ts b/tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit6_ES5.ts new file mode 100644 index 00000000000..cb120d70822 --- /dev/null +++ b/tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit6_ES5.ts @@ -0,0 +1,5 @@ +// @target: es5 +// @declaration: true +var v = { + [-1]: {} +} diff --git a/tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit6_ES6.ts b/tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit6_ES6.ts new file mode 100644 index 00000000000..8d904244f3f --- /dev/null +++ b/tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit6_ES6.ts @@ -0,0 +1,5 @@ +// @target: es6 +// @declaration: true +var v = { + [-1]: {} +} \ No newline at end of file From aaf818b4eb133992fc3a02c118b205e1811d840f Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Wed, 26 Jun 2019 13:57:34 -0700 Subject: [PATCH 11/36] Treat negative numbers as non-dynamic names --- src/compiler/binder.ts | 3 +++ src/compiler/utilities.ts | 17 +++++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 660b19a5872..38d5ed24eae 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -274,6 +274,9 @@ namespace ts { if (isStringOrNumericLiteralLike(nameExpression)) { return escapeLeadingUnderscores(nameExpression.text); } + if (isSignedNumericLiteral(nameExpression)) { + return tokenToString(nameExpression.operator) + nameExpression.operand.text as __String; + } Debug.assert(isWellKnownSymbolSyntactically(nameExpression)); return getPropertyNameForKnownSymbolName(idText((nameExpression).name)); diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index ae5b60cd864..f1cee2d118a 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -2705,11 +2705,19 @@ namespace ts { return isStringLiteralLike(node) || isNumericLiteral(node); } + export function isSignedNumericLiteral(node: Node): node is PrefixUnaryExpression & { operand: NumericLiteral } { + return isPrefixUnaryExpression(node) && (node.operator === SyntaxKind.PlusToken || node.operator === SyntaxKind.MinusToken) && isNumericLiteral(node.operand); + } + /** - * A declaration has a dynamic name if both of the following are true: - * 1. The declaration has a computed property name - * 2. The computed name is *not* expressed as Symbol., where name - * is a property of the Symbol constructor that denotes a built in + * A declaration has a dynamic name if all of the following are true: + * 1. The declaration has a computed property name. + * 2. The computed name is *not* expressed as a StringLiteral. + * 3. The computed name is *not* expressed as a NumericLiteral. + * 4. The computed name is *not* expressed as a PlusToken or MinusToken + * immediately followed by a NumericLiteral. + * 5. The computed name is *not* expressed as `Symbol.`, where `` + * is a property of the Symbol constructor that denotes a built-in * Symbol. */ export function hasDynamicName(declaration: Declaration): declaration is DynamicNamedDeclaration { @@ -2720,6 +2728,7 @@ namespace ts { export function isDynamicName(name: DeclarationName): boolean { return name.kind === SyntaxKind.ComputedPropertyName && !isStringOrNumericLiteralLike(name.expression) && + !isSignedNumericLiteral(name.expression) && !isWellKnownSymbolSyntactically(name.expression); } From 5ff3cda078b03bc02b4465f1c5eb208b18b83121 Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Wed, 26 Jun 2019 14:01:50 -0700 Subject: [PATCH 12/36] Add some negative test cases and accept baselines --- ...opertyNamesDeclarationEmit6_ES5.errors.txt | 13 ++++++++ ...mputedPropertyNamesDeclarationEmit6_ES5.js | 25 ++++++++++++++++ ...dPropertyNamesDeclarationEmit6_ES5.symbols | 17 +++++++++++ ...tedPropertyNamesDeclarationEmit6_ES5.types | 30 +++++++++++++++++++ ...opertyNamesDeclarationEmit6_ES6.errors.txt | 13 ++++++++ ...mputedPropertyNamesDeclarationEmit6_ES6.js | 24 +++++++++++++++ ...dPropertyNamesDeclarationEmit6_ES6.symbols | 17 +++++++++++ ...tedPropertyNamesDeclarationEmit6_ES6.types | 30 +++++++++++++++++++ ...mputedPropertyNamesDeclarationEmit6_ES5.ts | 5 +++- ...mputedPropertyNamesDeclarationEmit6_ES6.ts | 7 +++-- 10 files changed, 178 insertions(+), 3 deletions(-) create mode 100644 tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES5.errors.txt create mode 100644 tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES5.js create mode 100644 tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES5.symbols create mode 100644 tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES5.types create mode 100644 tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES6.errors.txt create mode 100644 tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES6.js create mode 100644 tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES6.symbols create mode 100644 tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES6.types diff --git a/tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES5.errors.txt b/tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES5.errors.txt new file mode 100644 index 00000000000..ec8f9f5ea58 --- /dev/null +++ b/tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES5.errors.txt @@ -0,0 +1,13 @@ +tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit6_ES5.ts(5,3): error TS2464: A computed property name must be of type 'string', 'number', 'symbol', or 'any'. + + +==== tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit6_ES5.ts (1 errors) ==== + var v = { + [-1]: {}, + [+1]: {}, + [~1]: {}, + [!1]: {} + ~~~~ +!!! error TS2464: A computed property name must be of type 'string', 'number', 'symbol', or 'any'. + } + \ No newline at end of file diff --git a/tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES5.js b/tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES5.js new file mode 100644 index 00000000000..a0a7b11fa9b --- /dev/null +++ b/tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES5.js @@ -0,0 +1,25 @@ +//// [computedPropertyNamesDeclarationEmit6_ES5.ts] +var v = { + [-1]: {}, + [+1]: {}, + [~1]: {}, + [!1]: {} +} + + +//// [computedPropertyNamesDeclarationEmit6_ES5.js] +var _a; +var v = (_a = {}, + _a[-1] = {}, + _a[+1] = {}, + _a[~1] = {}, + _a[!1] = {}, + _a); + + +//// [computedPropertyNamesDeclarationEmit6_ES5.d.ts] +declare var v: { + [x: number]: {}; + [-1]: {}; + 1: {}; +}; diff --git a/tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES5.symbols b/tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES5.symbols new file mode 100644 index 00000000000..40280f88d4c --- /dev/null +++ b/tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES5.symbols @@ -0,0 +1,17 @@ +=== tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit6_ES5.ts === +var v = { +>v : Symbol(v, Decl(computedPropertyNamesDeclarationEmit6_ES5.ts, 0, 3)) + + [-1]: {}, +>[-1] : Symbol([-1], Decl(computedPropertyNamesDeclarationEmit6_ES5.ts, 0, 9)) + + [+1]: {}, +>[+1] : Symbol([+1], Decl(computedPropertyNamesDeclarationEmit6_ES5.ts, 1, 11)) + + [~1]: {}, +>[~1] : Symbol([~1], Decl(computedPropertyNamesDeclarationEmit6_ES5.ts, 2, 11)) + + [!1]: {} +>[!1] : Symbol([!1], Decl(computedPropertyNamesDeclarationEmit6_ES5.ts, 3, 11)) +} + diff --git a/tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES5.types b/tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES5.types new file mode 100644 index 00000000000..ed412b8041c --- /dev/null +++ b/tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES5.types @@ -0,0 +1,30 @@ +=== tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit6_ES5.ts === +var v = { +>v : { [x: number]: {}; [-1]: {}; 1: {}; } +>{ [-1]: {}, [+1]: {}, [~1]: {}, [!1]: {}} : { [x: number]: {}; [-1]: {}; [+1]: {}; } + + [-1]: {}, +>[-1] : {} +>-1 : -1 +>1 : 1 +>{} : {} + + [+1]: {}, +>[+1] : {} +>+1 : 1 +>1 : 1 +>{} : {} + + [~1]: {}, +>[~1] : {} +>~1 : number +>1 : 1 +>{} : {} + + [!1]: {} +>[!1] : {} +>!1 : boolean +>1 : 1 +>{} : {} +} + diff --git a/tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES6.errors.txt b/tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES6.errors.txt new file mode 100644 index 00000000000..d5db4741dd2 --- /dev/null +++ b/tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES6.errors.txt @@ -0,0 +1,13 @@ +tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit6_ES6.ts(5,3): error TS2464: A computed property name must be of type 'string', 'number', 'symbol', or 'any'. + + +==== tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit6_ES6.ts (1 errors) ==== + var v = { + [-1]: {}, + [+1]: {}, + [~1]: {}, + [!1]: {} + ~~~~ +!!! error TS2464: A computed property name must be of type 'string', 'number', 'symbol', or 'any'. + } + \ No newline at end of file diff --git a/tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES6.js b/tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES6.js new file mode 100644 index 00000000000..0adc9fb6de7 --- /dev/null +++ b/tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES6.js @@ -0,0 +1,24 @@ +//// [computedPropertyNamesDeclarationEmit6_ES6.ts] +var v = { + [-1]: {}, + [+1]: {}, + [~1]: {}, + [!1]: {} +} + + +//// [computedPropertyNamesDeclarationEmit6_ES6.js] +var v = { + [-1]: {}, + [+1]: {}, + [~1]: {}, + [!1]: {} +}; + + +//// [computedPropertyNamesDeclarationEmit6_ES6.d.ts] +declare var v: { + [x: number]: {}; + [-1]: {}; + 1: {}; +}; diff --git a/tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES6.symbols b/tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES6.symbols new file mode 100644 index 00000000000..0be9c2e9441 --- /dev/null +++ b/tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES6.symbols @@ -0,0 +1,17 @@ +=== tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit6_ES6.ts === +var v = { +>v : Symbol(v, Decl(computedPropertyNamesDeclarationEmit6_ES6.ts, 0, 3)) + + [-1]: {}, +>[-1] : Symbol([-1], Decl(computedPropertyNamesDeclarationEmit6_ES6.ts, 0, 9)) + + [+1]: {}, +>[+1] : Symbol([+1], Decl(computedPropertyNamesDeclarationEmit6_ES6.ts, 1, 11)) + + [~1]: {}, +>[~1] : Symbol([~1], Decl(computedPropertyNamesDeclarationEmit6_ES6.ts, 2, 11)) + + [!1]: {} +>[!1] : Symbol([!1], Decl(computedPropertyNamesDeclarationEmit6_ES6.ts, 3, 11)) +} + diff --git a/tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES6.types b/tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES6.types new file mode 100644 index 00000000000..d68d458621c --- /dev/null +++ b/tests/baselines/reference/computedPropertyNamesDeclarationEmit6_ES6.types @@ -0,0 +1,30 @@ +=== tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit6_ES6.ts === +var v = { +>v : { [x: number]: {}; [-1]: {}; 1: {}; } +>{ [-1]: {}, [+1]: {}, [~1]: {}, [!1]: {}} : { [x: number]: {}; [-1]: {}; [+1]: {}; } + + [-1]: {}, +>[-1] : {} +>-1 : -1 +>1 : 1 +>{} : {} + + [+1]: {}, +>[+1] : {} +>+1 : 1 +>1 : 1 +>{} : {} + + [~1]: {}, +>[~1] : {} +>~1 : number +>1 : 1 +>{} : {} + + [!1]: {} +>[!1] : {} +>!1 : boolean +>1 : 1 +>{} : {} +} + diff --git a/tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit6_ES5.ts b/tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit6_ES5.ts index cb120d70822..002ad4be296 100644 --- a/tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit6_ES5.ts +++ b/tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit6_ES5.ts @@ -1,5 +1,8 @@ // @target: es5 // @declaration: true var v = { - [-1]: {} + [-1]: {}, + [+1]: {}, + [~1]: {}, + [!1]: {} } diff --git a/tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit6_ES6.ts b/tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit6_ES6.ts index 8d904244f3f..b146f3de98a 100644 --- a/tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit6_ES6.ts +++ b/tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit6_ES6.ts @@ -1,5 +1,8 @@ // @target: es6 // @declaration: true var v = { - [-1]: {} -} \ No newline at end of file + [-1]: {}, + [+1]: {}, + [~1]: {}, + [!1]: {} +} From 79c604836ad955f2e0d2ad99aa1e1225a92d764b Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Wed, 26 Jun 2019 16:56:54 -0700 Subject: [PATCH 13/36] Use intersectTypes instead of filterType --- src/compiler/checker.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 8feb1d4a412..0e18dba6635 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -13201,7 +13201,7 @@ namespace ts { const targetConstraint = getConstraintTypeFromMappedType(target); const sourceKeys = getIndexType(source, /*stringsOnly*/ undefined, /*noIndexSignatures*/ true); const includeOptional = modifiers & MappedTypeModifiers.IncludeOptional; - const filteredByApplicability = includeOptional ? filterType(getLiteralTypeFromProperties(target, TypeFlags.StringOrNumberLiteralOrUnique), t => !!isRelatedTo(t, sourceKeys)) : undefined; + const filteredByApplicability = includeOptional ? intersectTypes(targetConstraint, sourceKeys) : undefined; // A source type T is related to a target type { [P in Q]: X } if Q is related to keyof T and T[Q] is related to X. // A source type T is related to a target type { [P in Q]?: X } if some constituent Q' of Q is related to keyof T and T[Q'] is related to X. if (includeOptional From 5c6c1a3efe640d565e1d0bf0e0399b02b3866cc6 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Thu, 27 Jun 2019 16:48:00 -1000 Subject: [PATCH 14/36] Add regression test --- tests/cases/compiler/infiniteConstraints.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/cases/compiler/infiniteConstraints.ts b/tests/cases/compiler/infiniteConstraints.ts index e914b738efc..a1dcc754260 100644 --- a/tests/cases/compiler/infiniteConstraints.ts +++ b/tests/cases/compiler/infiniteConstraints.ts @@ -36,3 +36,15 @@ const shouldBeError = ensureNoDuplicates({main: value("dup"), alternate: value(" type Cond = T extends number ? number : never; declare function function1}>(): T[keyof T]["foo"]; + +// Repro from #31823 + +export type Prepend = + T extends unknown ? + ((arg: Elm, ...rest: T) => void) extends ((...args: infer T2) => void) ? T2 : + never : + never; +export type ExactExtract = T extends U ? U extends T ? T : never : never; + +type Conv = + { 0: [T]; 1: Prepend>>;}[U extends T ? 0 : 1]; From a1c6d9e671a01be3ebb7cb9a7e85f27f9fb1909b Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Thu, 27 Jun 2019 16:48:06 -1000 Subject: [PATCH 15/36] Accept new baselines --- .../reference/infiniteConstraints.errors.txt | 17 ++++++- .../reference/infiniteConstraints.js | 13 +++++ .../reference/infiniteConstraints.symbols | 50 +++++++++++++++++++ .../reference/infiniteConstraints.types | 23 +++++++++ 4 files changed, 102 insertions(+), 1 deletion(-) diff --git a/tests/baselines/reference/infiniteConstraints.errors.txt b/tests/baselines/reference/infiniteConstraints.errors.txt index 685b18932c1..2548b00f044 100644 --- a/tests/baselines/reference/infiniteConstraints.errors.txt +++ b/tests/baselines/reference/infiniteConstraints.errors.txt @@ -2,9 +2,10 @@ tests/cases/compiler/infiniteConstraints.ts(4,37): error TS2536: Type '"val"' ca tests/cases/compiler/infiniteConstraints.ts(31,43): error TS2322: Type 'Record<"val", "dup">' is not assignable to type 'never'. tests/cases/compiler/infiniteConstraints.ts(31,63): error TS2322: Type 'Record<"val", "dup">' is not assignable to type 'never'. tests/cases/compiler/infiniteConstraints.ts(36,71): error TS2536: Type '"foo"' cannot be used to index type 'T[keyof T]'. +tests/cases/compiler/infiniteConstraints.ts(48,16): error TS2589: Type instantiation is excessively deep and possibly infinite. -==== tests/cases/compiler/infiniteConstraints.ts (4 errors) ==== +==== tests/cases/compiler/infiniteConstraints.ts (5 errors) ==== // Both of the following types trigger the recursion limiter in getImmediateBaseConstraint type T1], { val: string }>["val"] }> = B; @@ -51,4 +52,18 @@ tests/cases/compiler/infiniteConstraints.ts(36,71): error TS2536: Type '"foo"' c declare function function1}>(): T[keyof T]["foo"]; ~~~~~~~~~~~~~~~~~ !!! error TS2536: Type '"foo"' cannot be used to index type 'T[keyof T]'. + + // Repro from #31823 + + export type Prepend = + T extends unknown ? + ((arg: Elm, ...rest: T) => void) extends ((...args: infer T2) => void) ? T2 : + never : + never; + export type ExactExtract = T extends U ? U extends T ? T : never : never; + + type Conv = + { 0: [T]; 1: Prepend>>;}[U extends T ? 0 : 1]; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. \ No newline at end of file diff --git a/tests/baselines/reference/infiniteConstraints.js b/tests/baselines/reference/infiniteConstraints.js index 03a4d70e00c..547091f5cf2 100644 --- a/tests/baselines/reference/infiniteConstraints.js +++ b/tests/baselines/reference/infiniteConstraints.js @@ -35,11 +35,24 @@ const shouldBeError = ensureNoDuplicates({main: value("dup"), alternate: value(" type Cond = T extends number ? number : never; declare function function1}>(): T[keyof T]["foo"]; + +// Repro from #31823 + +export type Prepend = + T extends unknown ? + ((arg: Elm, ...rest: T) => void) extends ((...args: infer T2) => void) ? T2 : + never : + never; +export type ExactExtract = T extends U ? U extends T ? T : never : never; + +type Conv = + { 0: [T]; 1: Prepend>>;}[U extends T ? 0 : 1]; //// [infiniteConstraints.js] "use strict"; // Both of the following types trigger the recursion limiter in getImmediateBaseConstraint +exports.__esModule = true; var out = myBug({ obj1: { a: "test" } }); var noError = ensureNoDuplicates({ main: value("test"), alternate: value("test2") }); var shouldBeNoError = ensureNoDuplicates({ main: value("test") }); diff --git a/tests/baselines/reference/infiniteConstraints.symbols b/tests/baselines/reference/infiniteConstraints.symbols index 6306203a7e0..2fa45c84f10 100644 --- a/tests/baselines/reference/infiniteConstraints.symbols +++ b/tests/baselines/reference/infiniteConstraints.symbols @@ -138,3 +138,53 @@ declare function function1}>(): T[keyof T] >T : Symbol(T, Decl(infiniteConstraints.ts, 35, 27)) >T : Symbol(T, Decl(infiniteConstraints.ts, 35, 27)) +// Repro from #31823 + +export type Prepend = +>Prepend : Symbol(Prepend, Decl(infiniteConstraints.ts, 35, 88)) +>Elm : Symbol(Elm, Decl(infiniteConstraints.ts, 39, 20)) +>T : Symbol(T, Decl(infiniteConstraints.ts, 39, 24)) + + T extends unknown ? +>T : Symbol(T, Decl(infiniteConstraints.ts, 39, 24)) + + ((arg: Elm, ...rest: T) => void) extends ((...args: infer T2) => void) ? T2 : +>arg : Symbol(arg, Decl(infiniteConstraints.ts, 41, 4)) +>Elm : Symbol(Elm, Decl(infiniteConstraints.ts, 39, 20)) +>rest : Symbol(rest, Decl(infiniteConstraints.ts, 41, 13)) +>T : Symbol(T, Decl(infiniteConstraints.ts, 39, 24)) +>args : Symbol(args, Decl(infiniteConstraints.ts, 41, 45)) +>T2 : Symbol(T2, Decl(infiniteConstraints.ts, 41, 59)) +>T2 : Symbol(T2, Decl(infiniteConstraints.ts, 41, 59)) + + never : + never; +export type ExactExtract = T extends U ? U extends T ? T : never : never; +>ExactExtract : Symbol(ExactExtract, Decl(infiniteConstraints.ts, 43, 8)) +>T : Symbol(T, Decl(infiniteConstraints.ts, 44, 25)) +>U : Symbol(U, Decl(infiniteConstraints.ts, 44, 27)) +>T : Symbol(T, Decl(infiniteConstraints.ts, 44, 25)) +>U : Symbol(U, Decl(infiniteConstraints.ts, 44, 27)) +>U : Symbol(U, Decl(infiniteConstraints.ts, 44, 27)) +>T : Symbol(T, Decl(infiniteConstraints.ts, 44, 25)) +>T : Symbol(T, Decl(infiniteConstraints.ts, 44, 25)) + +type Conv = +>Conv : Symbol(Conv, Decl(infiniteConstraints.ts, 44, 79)) +>T : Symbol(T, Decl(infiniteConstraints.ts, 46, 10)) +>U : Symbol(U, Decl(infiniteConstraints.ts, 46, 12)) +>T : Symbol(T, Decl(infiniteConstraints.ts, 46, 10)) + + { 0: [T]; 1: Prepend>>;}[U extends T ? 0 : 1]; +>0 : Symbol(0, Decl(infiniteConstraints.ts, 47, 3)) +>T : Symbol(T, Decl(infiniteConstraints.ts, 46, 10)) +>1 : Symbol(1, Decl(infiniteConstraints.ts, 47, 11)) +>Prepend : Symbol(Prepend, Decl(infiniteConstraints.ts, 35, 88)) +>T : Symbol(T, Decl(infiniteConstraints.ts, 46, 10)) +>Conv : Symbol(Conv, Decl(infiniteConstraints.ts, 44, 79)) +>ExactExtract : Symbol(ExactExtract, Decl(infiniteConstraints.ts, 43, 8)) +>U : Symbol(U, Decl(infiniteConstraints.ts, 46, 12)) +>T : Symbol(T, Decl(infiniteConstraints.ts, 46, 10)) +>U : Symbol(U, Decl(infiniteConstraints.ts, 46, 12)) +>T : Symbol(T, Decl(infiniteConstraints.ts, 46, 10)) + diff --git a/tests/baselines/reference/infiniteConstraints.types b/tests/baselines/reference/infiniteConstraints.types index c7d4c07ff4b..4b929ac667e 100644 --- a/tests/baselines/reference/infiniteConstraints.types +++ b/tests/baselines/reference/infiniteConstraints.types @@ -95,3 +95,26 @@ type Cond = T extends number ? number : never; declare function function1}>(): T[keyof T]["foo"]; >function1 : ; }>() => T[keyof T]["foo"] +// Repro from #31823 + +export type Prepend = +>Prepend : Prepend + + T extends unknown ? + ((arg: Elm, ...rest: T) => void) extends ((...args: infer T2) => void) ? T2 : +>arg : Elm +>rest : T +>args : T2 + + never : + never; +export type ExactExtract = T extends U ? U extends T ? T : never : never; +>ExactExtract : ExactExtract + +type Conv = +>Conv : { 0: [T]; 1: Prepend]; 1: Prepend, { 0: [ExactExtract, ExactExtract>]; 1: Prepend, ExactExtract>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>, any[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>> ? 0 : 1]>; }[ExactExtract, ExactExtract> extends ExactExtract, ExactExtract> ? 0 : 1]>; }[ExactExtract extends ExactExtract ? 0 : 1]>; }[U extends T ? 0 : 1] + + { 0: [T]; 1: Prepend>>;}[U extends T ? 0 : 1]; +>0 : [T] +>1 : Prepend]; 1: Prepend, { 0: [ExactExtract, ExactExtract>]; 1: Prepend, ExactExtract>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>>, any[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>> ? 0 : 1]>; }[ExactExtract, ExactExtract> extends ExactExtract, ExactExtract> ? 0 : 1]>; }[ExactExtract extends ExactExtract ? 0 : 1]> + From 4f802e7205733efb1d7567cddeee4609fad95ccb Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Fri, 28 Jun 2019 10:14:33 -0700 Subject: [PATCH 16/36] When checking sourceFile is from external library, use sourceFile.resolvedPath since thats how the source files are queried and thats the real path Fixes #32086 --- src/compiler/program.ts | 2 +- .../unittests/tsserver/projectReferences.ts | 75 +++++++++++++++++++ 2 files changed, 76 insertions(+), 1 deletion(-) diff --git a/src/compiler/program.ts b/src/compiler/program.ts index f5ede694f8c..889d24549e5 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -1395,7 +1395,7 @@ namespace ts { const filePath = newSourceFile.path; addFileToFilesByName(newSourceFile, filePath, newSourceFile.resolvedPath); // Set the file as found during node modules search if it was found that way in old progra, - if (oldProgram.isSourceFileFromExternalLibrary(oldProgram.getSourceFileByPath(filePath)!)) { + if (oldProgram.isSourceFileFromExternalLibrary(oldProgram.getSourceFileByPath(newSourceFile.resolvedPath)!)) { sourceFilesFoundSearchingNodeModules.set(filePath, true); } } diff --git a/src/testRunner/unittests/tsserver/projectReferences.ts b/src/testRunner/unittests/tsserver/projectReferences.ts index 1b2e90bcd4f..df1a7462da2 100644 --- a/src/testRunner/unittests/tsserver/projectReferences.ts +++ b/src/testRunner/unittests/tsserver/projectReferences.ts @@ -674,5 +674,80 @@ fn5(); ); }); }); + + it("reusing d.ts files from composite and non composite projects", () => { + const projectLocation = "/user/username/projects/myproject"; + const configA: File = { + path: `${projectLocation}/compositea/tsconfig.json`, + content: JSON.stringify({ + compilerOptions: { + composite: true, + outDir: "../dist/", + rootDir: "../", + baseUrl: "../", + paths: { "@ref/*": ["./dist/*"] } + } + }) + }; + const aTs: File = { + path: `${projectLocation}/compositea/a.ts`, + content: `import { b } from "@ref/compositeb/b";` + }; + const a2Ts: File = { + path: `${projectLocation}/compositea/a2.ts`, + content: `export const x = 10;` + }; + const configB: File = { + path: `${projectLocation}/compositeb/tsconfig.json`, + content: configA.content + }; + const bTs: File = { + path: `${projectLocation}/compositeb/b.ts`, + content: "export function b() {}" + }; + const bDts: File = { + path: `${projectLocation}/dist/compositeb/b.d.ts`, + content: "export declare function b(): void;" + }; + const configC: File = { + path: `${projectLocation}/compositec/tsconfig.json`, + content: JSON.stringify({ + compilerOptions: { + composite: true, + outDir: "../dist/", + rootDir: "../", + baseUrl: "../", + paths: { "@ref/*": ["./*"] } + }, + references: [{ path: "../compositeb" }] + }) + }; + const cTs: File = { + path: `${projectLocation}/compositec/c.ts`, + content: aTs.content + }; + const files = [libFile, aTs, a2Ts, configA, bDts, bTs, configB, cTs, configC]; + const host = createServerHost(files); + const service = createProjectService(host); + service.openClientFile(aTs.path); + service.checkNumberOfProjects({ configuredProjects: 1 }); + + // project A referencing b.d.ts without project reference + const projectA = service.configuredProjects.get(configA.path)!; + assert.isDefined(projectA); + checkProjectActualFiles(projectA, [aTs.path, a2Ts.path, bDts.path, libFile.path, configA.path]); + + // reuses b.d.ts but sets the path and resolved path since projectC has project references + // as the real resolution was to b.ts + service.openClientFile(cTs.path); + service.checkNumberOfProjects({ configuredProjects: 2 }); + const projectC = service.configuredProjects.get(configC.path)!; + checkProjectActualFiles(projectC, [cTs.path, bDts.path, libFile.path, configC.path]); + + // Now new project for project A tries to reuse b but there is no filesByName mapping for b's source location + host.writeFile(a2Ts.path, `${a2Ts.content}export const y = 30;`); + assert.isTrue(projectA.dirty); + projectA.updateGraph(); + }); }); } From 4ae091fa9ef3c4043530908d03525aca108fdd54 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Fri, 28 Jun 2019 10:17:58 -0700 Subject: [PATCH 17/36] Update src/server/project.ts Co-Authored-By: Orta --- src/server/project.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/project.ts b/src/server/project.ts index 32a1d8f53b2..889e97b24c5 100644 --- a/src/server/project.ts +++ b/src/server/project.ts @@ -1064,7 +1064,7 @@ namespace ts.server { const path = this.toPath(sourceFile); if (this.generatedFilesMap) { if (isGeneratedFileWatcher(this.generatedFilesMap)) { - Debug.fail(`${this.projectName} Expected not to have --out watcher for generated file with options: ${JSON.stringify(this.compilerOptions)}`); + Debug.fail(`${this.projectName} Expected to not have --out watcher for generated file with options: ${JSON.stringify(this.compilerOptions)}`); return; } if (this.generatedFilesMap.has(path)) return; From 2e5249835dc6c17106918e267213f8d8798532ee Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Fri, 28 Jun 2019 16:54:42 -1000 Subject: [PATCH 18/36] Remove logic that pads array literals contextually typed by tuple types --- src/compiler/checker.ts | 50 ++++++++++++++++------------------------- 1 file changed, 19 insertions(+), 31 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index cf614ee2013..c62263957c7 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -722,6 +722,7 @@ namespace ts { NoIndexSignatures = 1 << 0, Writing = 1 << 1, CacheSymbol = 1 << 2, + NoTupleBoundsCheck = 1 << 3, } const enum CallbackCheck { @@ -5115,21 +5116,25 @@ namespace ts { } else if (isArrayLikeType(parentType)) { const indexType = getLiteralType(index); - const declaredType = getConstraintForLocation(getIndexedAccessType(parentType, indexType, declaration.name), declaration.name); + const accessFlags = hasDefaultValue(declaration) ? AccessFlags.NoTupleBoundsCheck : 0; + const declaredType = getConstraintForLocation(getIndexedAccessTypeOrUndefined(parentType, indexType, declaration.name, accessFlags) || errorType, declaration.name); type = getFlowTypeOfDestructuring(declaration, declaredType); } else { type = elementType; } } - // In strict null checking mode, if a default value of a non-undefined type is specified, remove - // undefined from the final type. - if (strictNullChecks && declaration.initializer && !(getFalsyFlags(checkDeclarationInitializer(declaration)) & TypeFlags.Undefined)) { - type = getTypeWithFacts(type, TypeFacts.NEUndefined); + if (!declaration.initializer) { + return type; } - return declaration.initializer && !getEffectiveTypeAnnotationNode(walkUpBindingElementsAndPatterns(declaration)) ? - getUnionType([type, checkDeclarationInitializer(declaration)], UnionReduction.Subtype) : - type; + if (getEffectiveTypeAnnotationNode(walkUpBindingElementsAndPatterns(declaration))) { + // In strict null checking mode, if a default value of a non-undefined type is specified, remove + // undefined from the final type. + return strictNullChecks && !(getFalsyFlags(checkDeclarationInitializer(declaration)) & TypeFlags.Undefined) ? + getTypeWithFacts(type, TypeFacts.NEUndefined) : + type; + } + return getUnionType([getTypeWithFacts(type, TypeFacts.NEUndefined), checkDeclarationInitializer(declaration)], UnionReduction.Subtype); } function getTypeForDeclarationFromJSDocComment(declaration: Node) { @@ -10131,7 +10136,7 @@ namespace ts { propType; } if (everyType(objectType, isTupleType) && isNumericLiteralName(propName) && +propName >= 0) { - if (accessNode && everyType(objectType, t => !(t).target.hasRestElement)) { + if (accessNode && everyType(objectType, t => !(t).target.hasRestElement) && !(accessFlags & AccessFlags.NoTupleBoundsCheck)) { const indexNode = getIndexNodeForAccessExpression(accessNode); if (isTupleType(objectType)) { error(indexNode, Diagnostics.Tuple_type_0_of_length_1_has_no_element_at_index_2, @@ -19196,26 +19201,7 @@ namespace ts { function getArrayLiteralTupleTypeIfApplicable(elementTypes: Type[], contextualType: Type | undefined, hasRestElement: boolean, elementCount = elementTypes.length, readonly = false) { // Infer a tuple type when the contextual type is or contains a tuple-like type if (readonly || (contextualType && forEachType(contextualType, isTupleLikeType))) { - const minLength = elementCount - (hasRestElement ? 1 : 0); - const pattern = contextualType && contextualType.pattern; - // If array literal is contextually typed by a binding pattern or an assignment pattern, pad the resulting - // tuple type with the corresponding binding or assignment element types to make the lengths equal. - if (!hasRestElement && pattern && (pattern.kind === SyntaxKind.ArrayBindingPattern || pattern.kind === SyntaxKind.ArrayLiteralExpression)) { - const patternElements = (pattern).elements; - for (let i = elementCount; i < patternElements.length; i++) { - const e = patternElements[i]; - if (hasDefaultValue(e)) { - elementTypes.push((contextualType).typeArguments![i]); - } - else if (i < patternElements.length - 1 || !(e.kind === SyntaxKind.BindingElement && (e).dotDotDotToken || e.kind === SyntaxKind.SpreadElement)) { - if (e.kind !== SyntaxKind.OmittedExpression) { - error(e, Diagnostics.Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value); - } - elementTypes.push(strictNullChecks ? implicitNeverType : undefinedWideningType); - } - } - } - return createTupleType(elementTypes, minLength, hasRestElement, readonly); + return createTupleType(elementTypes, elementCount - (hasRestElement ? 1 : 0), hasRestElement, readonly); } } @@ -23655,8 +23641,10 @@ namespace ts { if (isArrayLikeType(sourceType)) { // We create a synthetic expression so that getIndexedAccessType doesn't get confused // when the element is a SyntaxKind.ElementAccessExpression. - const elementType = getIndexedAccessType(sourceType, indexType, createSyntheticExpression(element, indexType)); - const type = getFlowTypeOfDestructuring(element, elementType); + const accessFlags = hasDefaultValue(element) ? AccessFlags.NoTupleBoundsCheck : 0; + const elementType = getIndexedAccessTypeOrUndefined(sourceType, indexType, createSyntheticExpression(element, indexType), accessFlags) || errorType; + const assignedType = hasDefaultValue(element) ? getTypeWithFacts(elementType, TypeFacts.NEUndefined) : elementType; + const type = getFlowTypeOfDestructuring(element, assignedType); return checkDestructuringAssignment(element, type, checkMode); } return checkDestructuringAssignment(element, elementType, checkMode); From fbb79400bb5cd6226fd019ddb9f400572f48b83f Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Fri, 28 Jun 2019 16:54:55 -1000 Subject: [PATCH 19/36] Accept new baselines --- ...nEmitDestructuringArrayPattern2.errors.txt | 12 +++++----- ...clarationEmitDestructuringArrayPattern2.js | 2 +- ...rationEmitDestructuringArrayPattern2.types | 8 +++---- .../declarationsAndAssignments.errors.txt | 24 +++++++++---------- .../declarationsAndAssignments.types | 18 +++++++------- ...BindingPatternAndAssignment1ES5.errors.txt | 12 +++++----- ...ArrayBindingPatternAndAssignment1ES5.types | 22 ++++++++--------- ...atternAndAssignment1ES5iterable.errors.txt | 12 +++++----- ...dingPatternAndAssignment1ES5iterable.types | 22 ++++++++--------- ...BindingPatternAndAssignment1ES6.errors.txt | 12 +++++----- ...ArrayBindingPatternAndAssignment1ES6.types | 22 ++++++++--------- ...rayBindingPatternAndAssignment2.errors.txt | 8 +++---- ...ingArrayBindingPatternAndAssignment2.types | 2 +- ...ingArrayBindingPatternAndAssignment3.types | 6 ++--- ...destructuringVariableDeclaration1ES5.types | 6 ++--- ...destructuringVariableDeclaration1ES6.types | 6 ++--- .../destructuringVariableDeclaration2.types | 2 +- .../reference/downlevelLetConst12.errors.txt | 8 +++---- .../reference/downlevelLetConst12.types | 8 +++---- ...plicitAnyDestructuringVarDeclaration.types | 2 +- .../reference/recursiveLetConst.types | 2 +- ...entArrayBindingPatternDefaultValues3.types | 18 +++++++------- 22 files changed, 117 insertions(+), 117 deletions(-) diff --git a/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.errors.txt b/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.errors.txt index 26998fd83ae..e782352073a 100644 --- a/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.errors.txt +++ b/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.errors.txt @@ -1,6 +1,6 @@ -tests/cases/compiler/declarationEmitDestructuringArrayPattern2.ts(4,6): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. -tests/cases/compiler/declarationEmitDestructuringArrayPattern2.ts(4,11): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. -tests/cases/compiler/declarationEmitDestructuringArrayPattern2.ts(4,16): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +tests/cases/compiler/declarationEmitDestructuringArrayPattern2.ts(4,6): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. +tests/cases/compiler/declarationEmitDestructuringArrayPattern2.ts(4,11): error TS2493: Tuple type '[]' of length '0' has no element at index '1'. +tests/cases/compiler/declarationEmitDestructuringArrayPattern2.ts(4,16): error TS2493: Tuple type '[]' of length '0' has no element at index '2'. ==== tests/cases/compiler/declarationEmitDestructuringArrayPattern2.ts (3 errors) ==== @@ -9,11 +9,11 @@ tests/cases/compiler/declarationEmitDestructuringArrayPattern2.ts(4,16): error T var [x11 = 0, y11 = ""] = [1, "hello"]; var [a11, b11, c11] = []; ~~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. ~~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '1'. ~~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '2'. var [a2, [b2, { x12, y12: c2 }]=["abc", { x12: 10, y12: false }]] = [1, ["hello", { x12: 5, y12: true }]]; diff --git a/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.js b/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.js index 818b3a6f7a9..663b2d3567b 100644 --- a/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.js +++ b/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.js @@ -22,7 +22,7 @@ var _m = [[x13, y13], { x: x13, y: y13 }], a3 = _m[0], b3 = _m[1]; //// [declarationEmitDestructuringArrayPattern2.d.ts] declare var x10: number, y10: string, z10: boolean; declare var x11: number, y11: string; -declare var a11: any, b11: any, c11: any; +declare var a11: undefined, b11: undefined, c11: undefined; declare var a2: number, b2: string, x12: number, c2: boolean; declare var x13: number, y13: string; declare var a3: (string | number)[], b3: { diff --git a/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.types b/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.types index 37781e0a1ae..b473e544ae1 100644 --- a/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.types +++ b/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.types @@ -20,10 +20,10 @@ var [x11 = 0, y11 = ""] = [1, "hello"]; >"hello" : "hello" var [a11, b11, c11] = []; ->a11 : any ->b11 : any ->c11 : any ->[] : [undefined?, undefined?, undefined?] +>a11 : undefined +>b11 : undefined +>c11 : undefined +>[] : [] var [a2, [b2, { x12, y12: c2 }]=["abc", { x12: 10, y12: false }]] = [1, ["hello", { x12: 5, y12: true }]]; >a2 : number diff --git a/tests/baselines/reference/declarationsAndAssignments.errors.txt b/tests/baselines/reference/declarationsAndAssignments.errors.txt index b13aacbfbc3..d6f0ab3873a 100644 --- a/tests/baselines/reference/declarationsAndAssignments.errors.txt +++ b/tests/baselines/reference/declarationsAndAssignments.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(5,16): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(5,16): error TS2493: Tuple type '[number, string]' of length '2' has no element at index '2'. tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(22,17): error TS2353: Object literal may only specify known properties, and 'x' does not exist in type '{}'. tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(22,23): error TS2353: Object literal may only specify known properties, and 'y' does not exist in type '{}'. tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(23,25): error TS2353: Object literal may only specify known properties, and 'y' does not exist in type '{ x: any; }'. @@ -6,11 +6,11 @@ tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(24,19): tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(28,28): error TS2353: Object literal may only specify known properties, and 'y' does not exist in type '{ x: any; }'. tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(29,22): error TS2353: Object literal may only specify known properties, and 'x' does not exist in type '{ y: any; }'. tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(58,9): error TS2403: Subsequent variable declarations must have the same type. Variable 'y' must be of type 'string | number', but here has type 'string'. -tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(62,10): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. -tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(62,13): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. -tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(62,16): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. -tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(63,13): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. -tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(63,16): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(62,10): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. +tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(62,13): error TS2493: Tuple type '[]' of length '0' has no element at index '1'. +tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(62,16): error TS2493: Tuple type '[]' of length '0' has no element at index '2'. +tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(63,13): error TS2493: Tuple type '[number]' of length '1' has no element at index '1'. +tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(63,16): error TS2493: Tuple type '[number]' of length '1' has no element at index '2'. tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(67,9): error TS2461: Type '{}' is not an array type. tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(68,9): error TS2461: Type '{ 0: number; 1: number; }' is not an array type. tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(73,11): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. @@ -29,7 +29,7 @@ tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(138,9): var [x, y] = [1, "hello"]; var [x, y, z] = [1, "hello"]; ~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[number, string]' of length '2' has no element at index '2'. var [,, x] = [0, 1, 2]; var x: number; var y: string; @@ -103,16 +103,16 @@ tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(138,9): function f8() { var [a, b, c] = []; // Error, [] is an empty tuple ~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. ~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '1'. ~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '2'. var [d, e, f] = [1]; // Error, [1] is a tuple ~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[number]' of length '1' has no element at index '1'. ~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[number]' of length '1' has no element at index '2'. } function f9() { diff --git a/tests/baselines/reference/declarationsAndAssignments.types b/tests/baselines/reference/declarationsAndAssignments.types index 89ddd0eb5e5..ed157a7e69c 100644 --- a/tests/baselines/reference/declarationsAndAssignments.types +++ b/tests/baselines/reference/declarationsAndAssignments.types @@ -23,8 +23,8 @@ function f0() { var [x, y, z] = [1, "hello"]; >x : number >y : string ->z : any ->[1, "hello"] : [number, string, undefined?] +>z : undefined +>[1, "hello"] : [number, string] >1 : 1 >"hello" : "hello" @@ -255,16 +255,16 @@ function f8() { >f8 : () => void var [a, b, c] = []; // Error, [] is an empty tuple ->a : any ->b : any ->c : any ->[] : [undefined?, undefined?, undefined?] +>a : undefined +>b : undefined +>c : undefined +>[] : [] var [d, e, f] = [1]; // Error, [1] is a tuple >d : number ->e : any ->f : any ->[1] : [number, undefined?, undefined?] +>e : undefined +>f : undefined +>[1] : [number] >1 : 1 } diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5.errors.txt b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5.errors.txt index 1f1bc85757b..17a9dc13f9a 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5.errors.txt +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5.errors.txt @@ -1,6 +1,6 @@ -tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES5.ts(43,6): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. -tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES5.ts(44,8): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. -tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES5.ts(44,18): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES5.ts(43,6): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. +tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES5.ts(44,8): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. +tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES5.ts(44,18): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. ==== tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES5.ts (3 errors) ==== @@ -48,12 +48,12 @@ tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAss var [c0, c1] = [...temp]; var [c2] = []; ~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. var [[[c3]], [[[[c4]]]]] = [[[]], [[[[]]]]] ~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. ~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. var [[c5], c6]: [[string|number], boolean] = [[1], true]; var [, c7] = [1, 2, 3]; var [,,, c8] = [1, 2, 3, 4]; diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5.types b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5.types index 03990bc0846..d9e9cb494d2 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5.types +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5.types @@ -92,19 +92,19 @@ var [c0, c1] = [...temp]; >temp : number[] var [c2] = []; ->c2 : any ->[] : [undefined?] +>c2 : undefined +>[] : [] var [[[c3]], [[[[c4]]]]] = [[[]], [[[[]]]]] ->c3 : any ->c4 : any ->[[[]], [[[[]]]]] : [[[undefined?]], [[[[undefined?]]]]] ->[[]] : [[undefined?]] ->[] : [undefined?] ->[[[[]]]] : [[[[undefined?]]]] ->[[[]]] : [[[undefined?]]] ->[[]] : [[undefined?]] ->[] : [undefined?] +>c3 : undefined +>c4 : undefined +>[[[]], [[[[]]]]] : [[[]], [[[[]]]]] +>[[]] : [[]] +>[] : [] +>[[[[]]]] : [[[[]]]] +>[[[]]] : [[[]]] +>[[]] : [[]] +>[] : [] var [[c5], c6]: [[string|number], boolean] = [[1], true]; >c5 : string | number diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5iterable.errors.txt b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5iterable.errors.txt index 6a2647013fb..21e239114cb 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5iterable.errors.txt +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5iterable.errors.txt @@ -1,6 +1,6 @@ -tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES5iterable.ts(43,6): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. -tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES5iterable.ts(44,8): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. -tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES5iterable.ts(44,18): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES5iterable.ts(43,6): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. +tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES5iterable.ts(44,8): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. +tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES5iterable.ts(44,18): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. ==== tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES5iterable.ts (3 errors) ==== @@ -48,12 +48,12 @@ tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAss var [c0, c1] = [...temp]; var [c2] = []; ~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. var [[[c3]], [[[[c4]]]]] = [[[]], [[[[]]]]] ~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. ~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. var [[c5], c6]: [[string|number], boolean] = [[1], true]; var [, c7] = [1, 2, 3]; var [,,, c8] = [1, 2, 3, 4]; diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5iterable.types b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5iterable.types index cb2e8018232..6d232030fae 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5iterable.types +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5iterable.types @@ -92,19 +92,19 @@ var [c0, c1] = [...temp]; >temp : number[] var [c2] = []; ->c2 : any ->[] : [undefined?] +>c2 : undefined +>[] : [] var [[[c3]], [[[[c4]]]]] = [[[]], [[[[]]]]] ->c3 : any ->c4 : any ->[[[]], [[[[]]]]] : [[[undefined?]], [[[[undefined?]]]]] ->[[]] : [[undefined?]] ->[] : [undefined?] ->[[[[]]]] : [[[[undefined?]]]] ->[[[]]] : [[[undefined?]]] ->[[]] : [[undefined?]] ->[] : [undefined?] +>c3 : undefined +>c4 : undefined +>[[[]], [[[[]]]]] : [[[]], [[[[]]]]] +>[[]] : [[]] +>[] : [] +>[[[[]]]] : [[[[]]]] +>[[[]]] : [[[]]] +>[[]] : [[]] +>[] : [] var [[c5], c6]: [[string|number], boolean] = [[1], true]; >c5 : string | number diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES6.errors.txt b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES6.errors.txt index 4dc6085e662..3dc897456aa 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES6.errors.txt +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES6.errors.txt @@ -1,6 +1,6 @@ -tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES6.ts(43,6): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. -tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES6.ts(44,8): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. -tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES6.ts(44,18): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES6.ts(43,6): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. +tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES6.ts(44,8): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. +tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES6.ts(44,18): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. ==== tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES6.ts (3 errors) ==== @@ -48,12 +48,12 @@ tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAss var [c0, c1] = [...temp]; var [c2] = []; ~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. var [[[c3]], [[[[c4]]]]] = [[[]], [[[[]]]]] ~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. ~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. var [[c5], c6]: [[string|number], boolean] = [[1], true]; var [, c7] = [1, 2, 3]; var [,,, c8] = [1, 2, 3, 4]; diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES6.types b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES6.types index 9a00291f79c..feb0116ea04 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES6.types +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES6.types @@ -92,19 +92,19 @@ var [c0, c1] = [...temp]; >temp : number[] var [c2] = []; ->c2 : any ->[] : [undefined?] +>c2 : undefined +>[] : [] var [[[c3]], [[[[c4]]]]] = [[[]], [[[[]]]]] ->c3 : any ->c4 : any ->[[[]], [[[[]]]]] : [[[undefined?]], [[[[undefined?]]]]] ->[[]] : [[undefined?]] ->[] : [undefined?] ->[[[[]]]] : [[[[undefined?]]]] ->[[[]]] : [[[undefined?]]] ->[[]] : [[undefined?]] ->[] : [undefined?] +>c3 : undefined +>c4 : undefined +>[[[]], [[[[]]]]] : [[[]], [[[[]]]]] +>[[]] : [[]] +>[] : [] +>[[[[]]]] : [[[[]]]] +>[[[]]] : [[[]]] +>[[]] : [[]] +>[] : [] var [[c5], c6]: [[string|number], boolean] = [[1], true]; >c5 : string | number diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.errors.txt b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.errors.txt index 6d16229f333..dd01ac96519 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.errors.txt +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.errors.txt @@ -1,7 +1,7 @@ tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(3,6): error TS2461: Type 'undefined' is not an array type. -tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(3,6): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(3,6): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(3,12): error TS2461: Type 'undefined' is not an array type. -tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(3,12): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(3,12): error TS2493: Tuple type '[]' of length '0' has no element at index '1'. tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(4,5): error TS2461: Type 'undefined' is not an array type. tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(9,51): error TS2322: Type 'number' is not assignable to type 'boolean'. tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(22,5): error TS2739: Type 'number[]' is missing the following properties from type '[number, number]': 0, 1 @@ -16,11 +16,11 @@ tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAss ~~~~ !!! error TS2461: Type 'undefined' is not an array type. ~~~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. ~~~~~~ !!! error TS2461: Type 'undefined' is not an array type. ~~~~~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '1'. var [[a2], [[a3]]] = undefined // Error ~~~~~~~~~~~~~~ !!! error TS2461: Type 'undefined' is not an array type. diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.types b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.types index 77681f8d8c8..86723735bb5 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.types +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.types @@ -4,7 +4,7 @@ var [[a0], [[a1]]] = [] // Error >a0 : any >a1 : any ->[] : [undefined?, undefined?] +>[] : [] var [[a2], [[a3]]] = undefined // Error >a2 : any diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment3.types b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment3.types index 0fb81ba6aa3..5a0e03dda6e 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment3.types +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment3.types @@ -3,7 +3,7 @@ const [a, b = a] = [1]; // ok >a : any >b : any >a : any ->[1] : [number, any?] +>[1] : [number] >1 : 1 const [c, d = c, e = e] = [1]; // error for e = e @@ -12,7 +12,7 @@ const [c, d = c, e = e] = [1]; // error for e = e >c : any >e : any >e : any ->[1] : [number, any?, any?] +>[1] : [number] >1 : 1 const [f, g = f, h = i, i = f] = [1]; // error for h = i @@ -23,7 +23,7 @@ const [f, g = f, h = i, i = f] = [1]; // error for h = i >i : any >i : any >f : any ->[1] : [number, any?, any?, any?] +>[1] : [number] >1 : 1 (function ([a, b = a]) { // ok diff --git a/tests/baselines/reference/destructuringVariableDeclaration1ES5.types b/tests/baselines/reference/destructuringVariableDeclaration1ES5.types index fc153be7c60..0e1a89eff93 100644 --- a/tests/baselines/reference/destructuringVariableDeclaration1ES5.types +++ b/tests/baselines/reference/destructuringVariableDeclaration1ES5.types @@ -151,9 +151,9 @@ var {f: [f1, f2, { f3: f4, f5 }, , ]} = { f: [1, 2, { f3: 4, f5: 0 }] }; >f4 : number >f5 : number > : undefined ->{ f: [1, 2, { f3: 4, f5: 0 }] } : { f: [number, number, { f3: number; f5: number; }, undefined?]; } ->f : [number, number, { f3: number; f5: number; }, undefined?] ->[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }, undefined?] +>{ f: [1, 2, { f3: 4, f5: 0 }] } : { f: [number, number, { f3: number; f5: number; }]; } +>f : [number, number, { f3: number; f5: number; }] +>[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }] >1 : 1 >2 : 2 >{ f3: 4, f5: 0 } : { f3: number; f5: number; } diff --git a/tests/baselines/reference/destructuringVariableDeclaration1ES6.types b/tests/baselines/reference/destructuringVariableDeclaration1ES6.types index bf00e1955ca..d47ec0e0d74 100644 --- a/tests/baselines/reference/destructuringVariableDeclaration1ES6.types +++ b/tests/baselines/reference/destructuringVariableDeclaration1ES6.types @@ -151,9 +151,9 @@ var {f: [f1, f2, { f3: f4, f5 }, , ]} = { f: [1, 2, { f3: 4, f5: 0 }] }; >f4 : number >f5 : number > : undefined ->{ f: [1, 2, { f3: 4, f5: 0 }] } : { f: [number, number, { f3: number; f5: number; }, undefined?]; } ->f : [number, number, { f3: number; f5: number; }, undefined?] ->[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }, undefined?] +>{ f: [1, 2, { f3: 4, f5: 0 }] } : { f: [number, number, { f3: number; f5: number; }]; } +>f : [number, number, { f3: number; f5: number; }] +>[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }] >1 : 1 >2 : 2 >{ f3: 4, f5: 0 } : { f3: number; f5: number; } diff --git a/tests/baselines/reference/destructuringVariableDeclaration2.types b/tests/baselines/reference/destructuringVariableDeclaration2.types index ddb560f4e24..3b4fe8af85f 100644 --- a/tests/baselines/reference/destructuringVariableDeclaration2.types +++ b/tests/baselines/reference/destructuringVariableDeclaration2.types @@ -60,7 +60,7 @@ var [c1, c2, { c3: c4, c5 }, , ...c6] = [1, 2, { c3: 4, c5: 0 }]; // Error >c5 : number > : undefined >c6 : [] ->[1, 2, { c3: 4, c5: 0 }] : [number, number, { c3: number; c5: number; }, undefined?] +>[1, 2, { c3: 4, c5: 0 }] : [number, number, { c3: number; c5: number; }] >1 : 1 >2 : 2 >{ c3: 4, c5: 0 } : { c3: number; c5: number; } diff --git a/tests/baselines/reference/downlevelLetConst12.errors.txt b/tests/baselines/reference/downlevelLetConst12.errors.txt index 7d5c6828207..8c4bcb9d4f7 100644 --- a/tests/baselines/reference/downlevelLetConst12.errors.txt +++ b/tests/baselines/reference/downlevelLetConst12.errors.txt @@ -1,5 +1,5 @@ -tests/cases/compiler/downlevelLetConst12.ts(6,6): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. -tests/cases/compiler/downlevelLetConst12.ts(9,8): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +tests/cases/compiler/downlevelLetConst12.ts(6,6): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. +tests/cases/compiler/downlevelLetConst12.ts(9,8): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. ==== tests/cases/compiler/downlevelLetConst12.ts (2 errors) ==== @@ -10,10 +10,10 @@ tests/cases/compiler/downlevelLetConst12.ts(9,8): error TS2525: Initializer prov let [baz] = []; ~~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. let {a: baz2} = { a: 1 }; const [baz3] = [] ~~~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. const {a: baz4} = { a: 1 }; \ No newline at end of file diff --git a/tests/baselines/reference/downlevelLetConst12.types b/tests/baselines/reference/downlevelLetConst12.types index 25316e67eb4..3f64d06788c 100644 --- a/tests/baselines/reference/downlevelLetConst12.types +++ b/tests/baselines/reference/downlevelLetConst12.types @@ -11,8 +11,8 @@ const bar = 1; >1 : 1 let [baz] = []; ->baz : any ->[] : [undefined?] +>baz : undefined +>[] : [] let {a: baz2} = { a: 1 }; >a : any @@ -22,8 +22,8 @@ let {a: baz2} = { a: 1 }; >1 : 1 const [baz3] = [] ->baz3 : any ->[] : [undefined?] +>baz3 : undefined +>[] : [] const {a: baz4} = { a: 1 }; >a : any diff --git a/tests/baselines/reference/noImplicitAnyDestructuringVarDeclaration.types b/tests/baselines/reference/noImplicitAnyDestructuringVarDeclaration.types index 823af520806..8a60da05e6d 100644 --- a/tests/baselines/reference/noImplicitAnyDestructuringVarDeclaration.types +++ b/tests/baselines/reference/noImplicitAnyDestructuringVarDeclaration.types @@ -44,5 +44,5 @@ var [a4] = [undefined], {b4} = { b4: null }, c4 = undefined, d4 = null; // error var [a5 = undefined] = []; // error >a5 : any >undefined : undefined ->[] : [undefined?] +>[] : [] diff --git a/tests/baselines/reference/recursiveLetConst.types b/tests/baselines/reference/recursiveLetConst.types index 90b0d7baab1..7525d6242b6 100644 --- a/tests/baselines/reference/recursiveLetConst.types +++ b/tests/baselines/reference/recursiveLetConst.types @@ -49,7 +49,7 @@ for (let [v] of v) { } let [x2 = x2] = [] >x2 : any >x2 : any ->[] : [any?] +>[] : [] let z0 = () => z0; >z0 : () => any diff --git a/tests/baselines/reference/sourceMapValidationDestructuringVariableStatementArrayBindingPatternDefaultValues3.types b/tests/baselines/reference/sourceMapValidationDestructuringVariableStatementArrayBindingPatternDefaultValues3.types index fb9e4aca6b5..2f9d1dac6e3 100644 --- a/tests/baselines/reference/sourceMapValidationDestructuringVariableStatementArrayBindingPatternDefaultValues3.types +++ b/tests/baselines/reference/sourceMapValidationDestructuringVariableStatementArrayBindingPatternDefaultValues3.types @@ -234,11 +234,11 @@ let multiRobotAInfo: (string | string[])[]; [nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] = multiRobotB; >[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] = multiRobotB : [string, string[]] ->[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] : [string, [string?, string?]] +>[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] : [string, []] >nameMB = "helloNoName" : "helloNoName" >nameMB : string >"helloNoName" : "helloNoName" ->[primarySkillB = "noSkill", secondarySkillB = "noSkill"] = [] : [string?, string?] +>[primarySkillB = "noSkill", secondarySkillB = "noSkill"] = [] : [] >[primarySkillB = "noSkill", secondarySkillB = "noSkill"] : [string, string] >primarySkillB = "noSkill" : "noSkill" >primarySkillB : string @@ -246,16 +246,16 @@ let multiRobotAInfo: (string | string[])[]; >secondarySkillB = "noSkill" : "noSkill" >secondarySkillB : string >"noSkill" : "noSkill" ->[] : [string?, string?] +>[] : [] >multiRobotB : [string, string[]] [nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] = getMultiRobotB(); >[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] = getMultiRobotB() : [string, string[]] ->[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] : [string, [string?, string?]] +>[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] : [string, []] >nameMB = "helloNoName" : "helloNoName" >nameMB : string >"helloNoName" : "helloNoName" ->[primarySkillB = "noSkill", secondarySkillB = "noSkill"] = [] : [string?, string?] +>[primarySkillB = "noSkill", secondarySkillB = "noSkill"] = [] : [] >[primarySkillB = "noSkill", secondarySkillB = "noSkill"] : [string, string] >primarySkillB = "noSkill" : "noSkill" >primarySkillB : string @@ -263,17 +263,17 @@ let multiRobotAInfo: (string | string[])[]; >secondarySkillB = "noSkill" : "noSkill" >secondarySkillB : string >"noSkill" : "noSkill" ->[] : [string?, string?] +>[] : [] >getMultiRobotB() : [string, string[]] >getMultiRobotB : () => [string, string[]] [nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] = >[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] = ["trimmer", ["trimming", "edging"]] : [string, [string, string]] ->[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] : [string, [string?, string?]] +>[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] : [string, []] >nameMB = "helloNoName" : "helloNoName" >nameMB : string >"helloNoName" : "helloNoName" ->[primarySkillB = "noSkill", secondarySkillB = "noSkill"] = [] : [string?, string?] +>[primarySkillB = "noSkill", secondarySkillB = "noSkill"] = [] : [] >[primarySkillB = "noSkill", secondarySkillB = "noSkill"] : [string, string] >primarySkillB = "noSkill" : "noSkill" >primarySkillB : string @@ -281,7 +281,7 @@ let multiRobotAInfo: (string | string[])[]; >secondarySkillB = "noSkill" : "noSkill" >secondarySkillB : string >"noSkill" : "noSkill" ->[] : [string?, string?] +>[] : [] ["trimmer", ["trimming", "edging"]]; >["trimmer", ["trimming", "edging"]] : [string, [string, string]] From b7b7a6626c4ffe6d3d7450025da88548c419ac08 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Fri, 28 Jun 2019 17:09:22 -1000 Subject: [PATCH 20/36] Add regression tests --- tests/cases/compiler/destructuringTuple.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/cases/compiler/destructuringTuple.ts b/tests/cases/compiler/destructuringTuple.ts index c6a8431da0b..1b92b239875 100644 --- a/tests/cases/compiler/destructuringTuple.ts +++ b/tests/cases/compiler/destructuringTuple.ts @@ -7,3 +7,9 @@ const [a, b, c, ...rest] = tuple; declare var receiver: typeof tuple; [...receiver] = tuple; + +// Repros from #32140 + +const [oops1] = [1, 2, 3].reduce((accu, el) => accu.concat(el), []); + +const [oops2] = [1, 2, 3].reduce((acc: number[], e) => acc.concat(e), []); From 4c99084b383b0664fdc46c7307148ab1b12bae0a Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Fri, 28 Jun 2019 17:10:09 -1000 Subject: [PATCH 21/36] Accept new baselines --- .../reference/destructuringTuple.errors.txt | 23 +++++++++++ .../baselines/reference/destructuringTuple.js | 9 +++++ .../reference/destructuringTuple.symbols | 24 +++++++++++ .../reference/destructuringTuple.types | 40 +++++++++++++++++++ 4 files changed, 96 insertions(+) create mode 100644 tests/baselines/reference/destructuringTuple.errors.txt diff --git a/tests/baselines/reference/destructuringTuple.errors.txt b/tests/baselines/reference/destructuringTuple.errors.txt new file mode 100644 index 00000000000..cd366409dc8 --- /dev/null +++ b/tests/baselines/reference/destructuringTuple.errors.txt @@ -0,0 +1,23 @@ +tests/cases/compiler/destructuringTuple.ts(11,8): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. +tests/cases/compiler/destructuringTuple.ts(11,60): error TS2345: Argument of type 'number' is not assignable to parameter of type 'ConcatArray'. + + +==== tests/cases/compiler/destructuringTuple.ts (2 errors) ==== + declare var tuple: [boolean, number, ...string[]]; + + const [a, b, c, ...rest] = tuple; + + declare var receiver: typeof tuple; + + [...receiver] = tuple; + + // Repros from #32140 + + const [oops1] = [1, 2, 3].reduce((accu, el) => accu.concat(el), []); + ~~~~~ +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. + ~~ +!!! error TS2345: Argument of type 'number' is not assignable to parameter of type 'ConcatArray'. + + const [oops2] = [1, 2, 3].reduce((acc: number[], e) => acc.concat(e), []); + \ No newline at end of file diff --git a/tests/baselines/reference/destructuringTuple.js b/tests/baselines/reference/destructuringTuple.js index a8a0bc6f5e3..8d580dfba51 100644 --- a/tests/baselines/reference/destructuringTuple.js +++ b/tests/baselines/reference/destructuringTuple.js @@ -6,9 +6,18 @@ const [a, b, c, ...rest] = tuple; declare var receiver: typeof tuple; [...receiver] = tuple; + +// Repros from #32140 + +const [oops1] = [1, 2, 3].reduce((accu, el) => accu.concat(el), []); + +const [oops2] = [1, 2, 3].reduce((acc: number[], e) => acc.concat(e), []); //// [destructuringTuple.js] "use strict"; var a = tuple[0], b = tuple[1], c = tuple[2], rest = tuple.slice(3); receiver = tuple.slice(0); +// Repros from #32140 +var oops1 = [1, 2, 3].reduce(function (accu, el) { return accu.concat(el); }, [])[0]; +var oops2 = [1, 2, 3].reduce(function (acc, e) { return acc.concat(e); }, [])[0]; diff --git a/tests/baselines/reference/destructuringTuple.symbols b/tests/baselines/reference/destructuringTuple.symbols index 73480505c3b..82e006ca8c1 100644 --- a/tests/baselines/reference/destructuringTuple.symbols +++ b/tests/baselines/reference/destructuringTuple.symbols @@ -17,3 +17,27 @@ declare var receiver: typeof tuple; >receiver : Symbol(receiver, Decl(destructuringTuple.ts, 4, 11)) >tuple : Symbol(tuple, Decl(destructuringTuple.ts, 0, 11)) +// Repros from #32140 + +const [oops1] = [1, 2, 3].reduce((accu, el) => accu.concat(el), []); +>oops1 : Symbol(oops1, Decl(destructuringTuple.ts, 10, 7)) +>[1, 2, 3].reduce : Symbol(Array.reduce, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>reduce : Symbol(Array.reduce, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>accu : Symbol(accu, Decl(destructuringTuple.ts, 10, 34)) +>el : Symbol(el, Decl(destructuringTuple.ts, 10, 39)) +>accu.concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>accu : Symbol(accu, Decl(destructuringTuple.ts, 10, 34)) +>concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>el : Symbol(el, Decl(destructuringTuple.ts, 10, 39)) + +const [oops2] = [1, 2, 3].reduce((acc: number[], e) => acc.concat(e), []); +>oops2 : Symbol(oops2, Decl(destructuringTuple.ts, 12, 7)) +>[1, 2, 3].reduce : Symbol(Array.reduce, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>reduce : Symbol(Array.reduce, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>acc : Symbol(acc, Decl(destructuringTuple.ts, 12, 34)) +>e : Symbol(e, Decl(destructuringTuple.ts, 12, 48)) +>acc.concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>acc : Symbol(acc, Decl(destructuringTuple.ts, 12, 34)) +>concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>e : Symbol(e, Decl(destructuringTuple.ts, 12, 48)) + diff --git a/tests/baselines/reference/destructuringTuple.types b/tests/baselines/reference/destructuringTuple.types index fe3bf84746f..466e4495a16 100644 --- a/tests/baselines/reference/destructuringTuple.types +++ b/tests/baselines/reference/destructuringTuple.types @@ -20,3 +20,43 @@ declare var receiver: typeof tuple; >receiver : [boolean, number, ...string[]] >tuple : [boolean, number, ...string[]] +// Repros from #32140 + +const [oops1] = [1, 2, 3].reduce((accu, el) => accu.concat(el), []); +>oops1 : undefined +>[1, 2, 3].reduce((accu, el) => accu.concat(el), []) : [] +>[1, 2, 3].reduce : { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; (callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; } +>[1, 2, 3] : number[] +>1 : 1 +>2 : 2 +>3 : 3 +>reduce : { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; (callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; } +>(accu, el) => accu.concat(el) : (accu: [], el: number) => any +>accu : [] +>el : number +>accu.concat(el) : any +>accu.concat : { (...items: ConcatArray[]): never[]; (...items: ConcatArray[]): never[]; } +>accu : [] +>concat : { (...items: ConcatArray[]): never[]; (...items: ConcatArray[]): never[]; } +>el : number +>[] : [] + +const [oops2] = [1, 2, 3].reduce((acc: number[], e) => acc.concat(e), []); +>oops2 : number +>[1, 2, 3].reduce((acc: number[], e) => acc.concat(e), []) : number[] +>[1, 2, 3].reduce : { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; (callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; } +>[1, 2, 3] : number[] +>1 : 1 +>2 : 2 +>3 : 3 +>reduce : { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; (callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; } +>(acc: number[], e) => acc.concat(e) : (acc: number[], e: number) => number[] +>acc : number[] +>e : number +>acc.concat(e) : number[] +>acc.concat : { (...items: ConcatArray[]): number[]; (...items: (number | ConcatArray)[]): number[]; } +>acc : number[] +>concat : { (...items: ConcatArray[]): number[]; (...items: (number | ConcatArray)[]): number[]; } +>e : number +>[] : never[] + From eb1b2251b8d8ed28f81dd8c1f18347b28ed00ac0 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Sun, 30 Jun 2019 08:02:18 -1000 Subject: [PATCH 22/36] Pad tuple type initializers of parameter array binding elements --- src/compiler/checker.ts | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index c62263957c7..533231a575b 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -24233,10 +24233,13 @@ namespace ts { function checkDeclarationInitializer(declaration: HasExpressionInitializer) { const initializer = getEffectiveInitializer(declaration)!; const type = getTypeOfExpression(initializer, /*cache*/ true); + const padded = isParameter(declaration) && declaration.name.kind === SyntaxKind.ArrayBindingPattern && + isTupleType(type) && !type.target.hasRestElement && getTypeReferenceArity(type) < declaration.name.elements.length ? + padTupleType(type, declaration.name) : type; const widened = getCombinedNodeFlags(declaration) & NodeFlags.Const || isDeclarationReadonly(declaration) || isTypeAssertion(initializer) || - isLiteralOfContextualType(type, getContextualType(initializer)) ? type : getWidenedLiteralType(type); + isLiteralOfContextualType(padded, getContextualType(initializer)) ? padded : getWidenedLiteralType(padded); if (isInJSFile(declaration)) { if (widened.flags & TypeFlags.Nullable) { reportImplicitAny(declaration, anyType); @@ -24250,6 +24253,22 @@ namespace ts { return widened; } + function padTupleType(type: TupleTypeReference, pattern: ArrayBindingPattern) { + const patternElements = pattern.elements; + const arity = getTypeReferenceArity(type); + const elementTypes = arity ? type.typeArguments!.slice() : []; + for (let i = arity; i < patternElements.length; i++) { + const e = patternElements[i]; + if (i < patternElements.length - 1 || !(e.kind === SyntaxKind.BindingElement && (e).dotDotDotToken)) { + elementTypes.push(!isOmittedExpression(e) && hasDefaultValue(e) ? getTypeFromBindingElement(e, /*includePatternInType*/ false, /*reportErrors*/ false) : anyType); + if (!isOmittedExpression(e) && !hasDefaultValue(e)) { + reportImplicitAny(e, anyType); + } + } + } + return createTupleType(elementTypes, type.target.minLength, /*hasRestElement*/ false, type.target.readonly); + } + function isLiteralOfContextualType(candidateType: Type, contextualType: Type | undefined): boolean { if (contextualType) { if (contextualType.flags & TypeFlags.UnionOrIntersection) { From 32f1b4e56c820f2647817b8dbd42bc182521925d Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Sun, 30 Jun 2019 08:02:53 -1000 Subject: [PATCH 23/36] Accept new baselines --- ...estructuringVariableDeclaration1ES5iterable.types | 6 +++--- .../destructuringWithLiteralInitializers.types | 4 ++-- .../reference/downlevelLetConst16.errors.txt | 8 ++++---- tests/baselines/reference/downlevelLetConst16.types | 12 ++++++------ 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/tests/baselines/reference/destructuringVariableDeclaration1ES5iterable.types b/tests/baselines/reference/destructuringVariableDeclaration1ES5iterable.types index 9c943356d80..1476797e74a 100644 --- a/tests/baselines/reference/destructuringVariableDeclaration1ES5iterable.types +++ b/tests/baselines/reference/destructuringVariableDeclaration1ES5iterable.types @@ -151,9 +151,9 @@ var {f: [f1, f2, { f3: f4, f5 }, , ]} = { f: [1, 2, { f3: 4, f5: 0 }] }; >f4 : number >f5 : number > : undefined ->{ f: [1, 2, { f3: 4, f5: 0 }] } : { f: [number, number, { f3: number; f5: number; }, undefined?]; } ->f : [number, number, { f3: number; f5: number; }, undefined?] ->[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }, undefined?] +>{ f: [1, 2, { f3: 4, f5: 0 }] } : { f: [number, number, { f3: number; f5: number; }]; } +>f : [number, number, { f3: number; f5: number; }] +>[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }] >1 : 1 >2 : 2 >{ f3: 4, f5: 0 } : { f3: number; f5: number; } diff --git a/tests/baselines/reference/destructuringWithLiteralInitializers.types b/tests/baselines/reference/destructuringWithLiteralInitializers.types index f19c1cf2b7e..9a64518a8cb 100644 --- a/tests/baselines/reference/destructuringWithLiteralInitializers.types +++ b/tests/baselines/reference/destructuringWithLiteralInitializers.types @@ -274,7 +274,7 @@ function g4([x, y = 0] = [0]) { } >x : number >y : number >0 : 0 ->[0] : [number, number?] +>[0] : [number] >0 : 0 g4(); @@ -295,7 +295,7 @@ function g5([x = 0, y = 0] = []) { } >0 : 0 >y : number >0 : 0 ->[] : [number?, number?] +>[] : [] g5(); >g5() : void diff --git a/tests/baselines/reference/downlevelLetConst16.errors.txt b/tests/baselines/reference/downlevelLetConst16.errors.txt index 955c79378fe..664fadccac9 100644 --- a/tests/baselines/reference/downlevelLetConst16.errors.txt +++ b/tests/baselines/reference/downlevelLetConst16.errors.txt @@ -1,5 +1,5 @@ -tests/cases/compiler/downlevelLetConst16.ts(151,15): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. -tests/cases/compiler/downlevelLetConst16.ts(164,17): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +tests/cases/compiler/downlevelLetConst16.ts(151,15): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. +tests/cases/compiler/downlevelLetConst16.ts(164,17): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. tests/cases/compiler/downlevelLetConst16.ts(195,14): error TS2461: Type 'undefined' is not an array type. tests/cases/compiler/downlevelLetConst16.ts(202,15): error TS2339: Property 'a' does not exist on type 'undefined'. tests/cases/compiler/downlevelLetConst16.ts(216,16): error TS2461: Type 'undefined' is not an array type. @@ -159,7 +159,7 @@ tests/cases/compiler/downlevelLetConst16.ts(223,17): error TS2339: Property 'a' } for (let [y] = []; ;) { ~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. use(y); } for (let {a: z} = {a: 1}; ;) { @@ -174,7 +174,7 @@ tests/cases/compiler/downlevelLetConst16.ts(223,17): error TS2339: Property 'a' } for (const [y] = []; ;) { ~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. use(y); } for (const {a: z} = { a: 1 }; ;) { diff --git a/tests/baselines/reference/downlevelLetConst16.types b/tests/baselines/reference/downlevelLetConst16.types index 450773fd9bb..ac9dc31eb04 100644 --- a/tests/baselines/reference/downlevelLetConst16.types +++ b/tests/baselines/reference/downlevelLetConst16.types @@ -515,13 +515,13 @@ function foo3() { >x : any } for (let [y] = []; ;) { ->y : any ->[] : [undefined?] +>y : undefined +>[] : [] use(y); >use(y) : any >use : (a: any) => any ->y : any +>y : undefined } for (let {a: z} = {a: 1}; ;) { >a : any @@ -554,13 +554,13 @@ function foo4() { >x : 1 } for (const [y] = []; ;) { ->y : any ->[] : [undefined?] +>y : undefined +>[] : [] use(y); >use(y) : any >use : (a: any) => any ->y : any +>y : undefined } for (const {a: z} = { a: 1 }; ;) { >a : any From 5ad3d1bf084b356b20b7a94c5f81a1695e021840 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Sun, 30 Jun 2019 08:18:01 -1000 Subject: [PATCH 24/36] Add more tests --- .../destructuringWithLiteralInitializers2.ts | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers2.ts diff --git a/tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers2.ts b/tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers2.ts new file mode 100644 index 00000000000..7654a9ac336 --- /dev/null +++ b/tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers2.ts @@ -0,0 +1,29 @@ +// @strict: true + +function f00([x, y]) {} +function f01([x, y] = []) {} +function f02([x, y] = [1]) {} +function f03([x, y] = [1, 'foo']) {} + +function f10([x = 0, y]) {} +function f11([x = 0, y] = []) {} +function f12([x = 0, y] = [1]) {} +function f13([x = 0, y] = [1, 'foo']) {} + +function f20([x = 0, y = 'bar']) {} +function f21([x = 0, y = 'bar'] = []) {} +function f22([x = 0, y = 'bar'] = [1]) {} +function f23([x = 0, y = 'bar'] = [1, 'foo']) {} + +declare const nx: number | undefined; +declare const sx: string | undefined; + +function f30([x = 0, y = 'bar']) {} +function f31([x = 0, y = 'bar'] = []) {} +function f32([x = 0, y = 'bar'] = [nx]) {} +function f33([x = 0, y = 'bar'] = [nx, sx]) {} + +function f40([x = 0, y = 'bar']) {} +function f41([x = 0, y = 'bar'] = []) {} +function f42([x = 0, y = 'bar'] = [sx]) {} +function f43([x = 0, y = 'bar'] = [sx, nx]) {} From cc7a24c27f1428a7c476a704f778a6579a287633 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Sun, 30 Jun 2019 08:18:08 -1000 Subject: [PATCH 25/36] Accept new baselines --- ...cturingWithLiteralInitializers2.errors.txt | 55 ++++++ .../destructuringWithLiteralInitializers2.js | 92 ++++++++++ ...tructuringWithLiteralInitializers2.symbols | 113 ++++++++++++ ...estructuringWithLiteralInitializers2.types | 165 ++++++++++++++++++ 4 files changed, 425 insertions(+) create mode 100644 tests/baselines/reference/destructuringWithLiteralInitializers2.errors.txt create mode 100644 tests/baselines/reference/destructuringWithLiteralInitializers2.js create mode 100644 tests/baselines/reference/destructuringWithLiteralInitializers2.symbols create mode 100644 tests/baselines/reference/destructuringWithLiteralInitializers2.types diff --git a/tests/baselines/reference/destructuringWithLiteralInitializers2.errors.txt b/tests/baselines/reference/destructuringWithLiteralInitializers2.errors.txt new file mode 100644 index 00000000000..983f853f9a4 --- /dev/null +++ b/tests/baselines/reference/destructuringWithLiteralInitializers2.errors.txt @@ -0,0 +1,55 @@ +tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers2.ts(1,15): error TS7031: Binding element 'x' implicitly has an 'any' type. +tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers2.ts(1,18): error TS7031: Binding element 'y' implicitly has an 'any' type. +tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers2.ts(2,15): error TS7031: Binding element 'x' implicitly has an 'any' type. +tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers2.ts(2,18): error TS7031: Binding element 'y' implicitly has an 'any' type. +tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers2.ts(3,18): error TS7031: Binding element 'y' implicitly has an 'any' type. +tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers2.ts(6,22): error TS7031: Binding element 'y' implicitly has an 'any' type. +tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers2.ts(7,22): error TS7031: Binding element 'y' implicitly has an 'any' type. +tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers2.ts(8,22): error TS7031: Binding element 'y' implicitly has an 'any' type. + + +==== tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers2.ts (8 errors) ==== + function f00([x, y]) {} + ~ +!!! error TS7031: Binding element 'x' implicitly has an 'any' type. + ~ +!!! error TS7031: Binding element 'y' implicitly has an 'any' type. + function f01([x, y] = []) {} + ~ +!!! error TS7031: Binding element 'x' implicitly has an 'any' type. + ~ +!!! error TS7031: Binding element 'y' implicitly has an 'any' type. + function f02([x, y] = [1]) {} + ~ +!!! error TS7031: Binding element 'y' implicitly has an 'any' type. + function f03([x, y] = [1, 'foo']) {} + + function f10([x = 0, y]) {} + ~ +!!! error TS7031: Binding element 'y' implicitly has an 'any' type. + function f11([x = 0, y] = []) {} + ~ +!!! error TS7031: Binding element 'y' implicitly has an 'any' type. + function f12([x = 0, y] = [1]) {} + ~ +!!! error TS7031: Binding element 'y' implicitly has an 'any' type. + function f13([x = 0, y] = [1, 'foo']) {} + + function f20([x = 0, y = 'bar']) {} + function f21([x = 0, y = 'bar'] = []) {} + function f22([x = 0, y = 'bar'] = [1]) {} + function f23([x = 0, y = 'bar'] = [1, 'foo']) {} + + declare const nx: number | undefined; + declare const sx: string | undefined; + + function f30([x = 0, y = 'bar']) {} + function f31([x = 0, y = 'bar'] = []) {} + function f32([x = 0, y = 'bar'] = [nx]) {} + function f33([x = 0, y = 'bar'] = [nx, sx]) {} + + function f40([x = 0, y = 'bar']) {} + function f41([x = 0, y = 'bar'] = []) {} + function f42([x = 0, y = 'bar'] = [sx]) {} + function f43([x = 0, y = 'bar'] = [sx, nx]) {} + \ No newline at end of file diff --git a/tests/baselines/reference/destructuringWithLiteralInitializers2.js b/tests/baselines/reference/destructuringWithLiteralInitializers2.js new file mode 100644 index 00000000000..1f3ee956144 --- /dev/null +++ b/tests/baselines/reference/destructuringWithLiteralInitializers2.js @@ -0,0 +1,92 @@ +//// [destructuringWithLiteralInitializers2.ts] +function f00([x, y]) {} +function f01([x, y] = []) {} +function f02([x, y] = [1]) {} +function f03([x, y] = [1, 'foo']) {} + +function f10([x = 0, y]) {} +function f11([x = 0, y] = []) {} +function f12([x = 0, y] = [1]) {} +function f13([x = 0, y] = [1, 'foo']) {} + +function f20([x = 0, y = 'bar']) {} +function f21([x = 0, y = 'bar'] = []) {} +function f22([x = 0, y = 'bar'] = [1]) {} +function f23([x = 0, y = 'bar'] = [1, 'foo']) {} + +declare const nx: number | undefined; +declare const sx: string | undefined; + +function f30([x = 0, y = 'bar']) {} +function f31([x = 0, y = 'bar'] = []) {} +function f32([x = 0, y = 'bar'] = [nx]) {} +function f33([x = 0, y = 'bar'] = [nx, sx]) {} + +function f40([x = 0, y = 'bar']) {} +function f41([x = 0, y = 'bar'] = []) {} +function f42([x = 0, y = 'bar'] = [sx]) {} +function f43([x = 0, y = 'bar'] = [sx, nx]) {} + + +//// [destructuringWithLiteralInitializers2.js] +"use strict"; +function f00(_a) { + var x = _a[0], y = _a[1]; +} +function f01(_a) { + var _b = _a === void 0 ? [] : _a, x = _b[0], y = _b[1]; +} +function f02(_a) { + var _b = _a === void 0 ? [1] : _a, x = _b[0], y = _b[1]; +} +function f03(_a) { + var _b = _a === void 0 ? [1, 'foo'] : _a, x = _b[0], y = _b[1]; +} +function f10(_a) { + var _b = _a[0], x = _b === void 0 ? 0 : _b, y = _a[1]; +} +function f11(_a) { + var _b = _a === void 0 ? [] : _a, _c = _b[0], x = _c === void 0 ? 0 : _c, y = _b[1]; +} +function f12(_a) { + var _b = _a === void 0 ? [1] : _a, _c = _b[0], x = _c === void 0 ? 0 : _c, y = _b[1]; +} +function f13(_a) { + var _b = _a === void 0 ? [1, 'foo'] : _a, _c = _b[0], x = _c === void 0 ? 0 : _c, y = _b[1]; +} +function f20(_a) { + var _b = _a[0], x = _b === void 0 ? 0 : _b, _c = _a[1], y = _c === void 0 ? 'bar' : _c; +} +function f21(_a) { + var _b = _a === void 0 ? [] : _a, _c = _b[0], x = _c === void 0 ? 0 : _c, _d = _b[1], y = _d === void 0 ? 'bar' : _d; +} +function f22(_a) { + var _b = _a === void 0 ? [1] : _a, _c = _b[0], x = _c === void 0 ? 0 : _c, _d = _b[1], y = _d === void 0 ? 'bar' : _d; +} +function f23(_a) { + var _b = _a === void 0 ? [1, 'foo'] : _a, _c = _b[0], x = _c === void 0 ? 0 : _c, _d = _b[1], y = _d === void 0 ? 'bar' : _d; +} +function f30(_a) { + var _b = _a[0], x = _b === void 0 ? 0 : _b, _c = _a[1], y = _c === void 0 ? 'bar' : _c; +} +function f31(_a) { + var _b = _a === void 0 ? [] : _a, _c = _b[0], x = _c === void 0 ? 0 : _c, _d = _b[1], y = _d === void 0 ? 'bar' : _d; +} +function f32(_a) { + var _b = _a === void 0 ? [nx] : _a, _c = _b[0], x = _c === void 0 ? 0 : _c, _d = _b[1], y = _d === void 0 ? 'bar' : _d; +} +function f33(_a) { + var _b = _a === void 0 ? [nx, sx] : _a, _c = _b[0], x = _c === void 0 ? 0 : _c, _d = _b[1], y = _d === void 0 ? 'bar' : _d; +} +function f40(_a) { + var _b = _a[0], x = _b === void 0 ? 0 : _b, _c = _a[1], y = _c === void 0 ? 'bar' : _c; +} +function f41(_a) { + var _b = _a === void 0 ? [] : _a, _c = _b[0], x = _c === void 0 ? 0 : _c, _d = _b[1], y = _d === void 0 ? 'bar' : _d; +} +function f42(_a) { + var _b = _a === void 0 ? [sx] : _a, _c = _b[0], x = _c === void 0 ? 0 : _c, _d = _b[1], y = _d === void 0 ? 'bar' : _d; +} +function f43(_a) { + var _b = _a === void 0 ? [sx, nx] : _a, _c = _b[0], x = _c === void 0 ? 0 : _c, _d = _b[1], y = _d === void 0 ? 'bar' : _d; +} diff --git a/tests/baselines/reference/destructuringWithLiteralInitializers2.symbols b/tests/baselines/reference/destructuringWithLiteralInitializers2.symbols new file mode 100644 index 00000000000..44224ac22a4 --- /dev/null +++ b/tests/baselines/reference/destructuringWithLiteralInitializers2.symbols @@ -0,0 +1,113 @@ +=== tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers2.ts === +function f00([x, y]) {} +>f00 : Symbol(f00, Decl(destructuringWithLiteralInitializers2.ts, 0, 0)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 0, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 0, 16)) + +function f01([x, y] = []) {} +>f01 : Symbol(f01, Decl(destructuringWithLiteralInitializers2.ts, 0, 23)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 1, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 1, 16)) + +function f02([x, y] = [1]) {} +>f02 : Symbol(f02, Decl(destructuringWithLiteralInitializers2.ts, 1, 28)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 2, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 2, 16)) + +function f03([x, y] = [1, 'foo']) {} +>f03 : Symbol(f03, Decl(destructuringWithLiteralInitializers2.ts, 2, 29)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 3, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 3, 16)) + +function f10([x = 0, y]) {} +>f10 : Symbol(f10, Decl(destructuringWithLiteralInitializers2.ts, 3, 36)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 5, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 5, 20)) + +function f11([x = 0, y] = []) {} +>f11 : Symbol(f11, Decl(destructuringWithLiteralInitializers2.ts, 5, 27)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 6, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 6, 20)) + +function f12([x = 0, y] = [1]) {} +>f12 : Symbol(f12, Decl(destructuringWithLiteralInitializers2.ts, 6, 32)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 7, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 7, 20)) + +function f13([x = 0, y] = [1, 'foo']) {} +>f13 : Symbol(f13, Decl(destructuringWithLiteralInitializers2.ts, 7, 33)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 8, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 8, 20)) + +function f20([x = 0, y = 'bar']) {} +>f20 : Symbol(f20, Decl(destructuringWithLiteralInitializers2.ts, 8, 40)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 10, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 10, 20)) + +function f21([x = 0, y = 'bar'] = []) {} +>f21 : Symbol(f21, Decl(destructuringWithLiteralInitializers2.ts, 10, 35)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 11, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 11, 20)) + +function f22([x = 0, y = 'bar'] = [1]) {} +>f22 : Symbol(f22, Decl(destructuringWithLiteralInitializers2.ts, 11, 40)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 12, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 12, 20)) + +function f23([x = 0, y = 'bar'] = [1, 'foo']) {} +>f23 : Symbol(f23, Decl(destructuringWithLiteralInitializers2.ts, 12, 41)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 13, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 13, 20)) + +declare const nx: number | undefined; +>nx : Symbol(nx, Decl(destructuringWithLiteralInitializers2.ts, 15, 13)) + +declare const sx: string | undefined; +>sx : Symbol(sx, Decl(destructuringWithLiteralInitializers2.ts, 16, 13)) + +function f30([x = 0, y = 'bar']) {} +>f30 : Symbol(f30, Decl(destructuringWithLiteralInitializers2.ts, 16, 37)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 18, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 18, 20)) + +function f31([x = 0, y = 'bar'] = []) {} +>f31 : Symbol(f31, Decl(destructuringWithLiteralInitializers2.ts, 18, 35)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 19, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 19, 20)) + +function f32([x = 0, y = 'bar'] = [nx]) {} +>f32 : Symbol(f32, Decl(destructuringWithLiteralInitializers2.ts, 19, 40)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 20, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 20, 20)) +>nx : Symbol(nx, Decl(destructuringWithLiteralInitializers2.ts, 15, 13)) + +function f33([x = 0, y = 'bar'] = [nx, sx]) {} +>f33 : Symbol(f33, Decl(destructuringWithLiteralInitializers2.ts, 20, 42)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 21, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 21, 20)) +>nx : Symbol(nx, Decl(destructuringWithLiteralInitializers2.ts, 15, 13)) +>sx : Symbol(sx, Decl(destructuringWithLiteralInitializers2.ts, 16, 13)) + +function f40([x = 0, y = 'bar']) {} +>f40 : Symbol(f40, Decl(destructuringWithLiteralInitializers2.ts, 21, 46)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 23, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 23, 20)) + +function f41([x = 0, y = 'bar'] = []) {} +>f41 : Symbol(f41, Decl(destructuringWithLiteralInitializers2.ts, 23, 35)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 24, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 24, 20)) + +function f42([x = 0, y = 'bar'] = [sx]) {} +>f42 : Symbol(f42, Decl(destructuringWithLiteralInitializers2.ts, 24, 40)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 25, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 25, 20)) +>sx : Symbol(sx, Decl(destructuringWithLiteralInitializers2.ts, 16, 13)) + +function f43([x = 0, y = 'bar'] = [sx, nx]) {} +>f43 : Symbol(f43, Decl(destructuringWithLiteralInitializers2.ts, 25, 42)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 26, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 26, 20)) +>sx : Symbol(sx, Decl(destructuringWithLiteralInitializers2.ts, 16, 13)) +>nx : Symbol(nx, Decl(destructuringWithLiteralInitializers2.ts, 15, 13)) + diff --git a/tests/baselines/reference/destructuringWithLiteralInitializers2.types b/tests/baselines/reference/destructuringWithLiteralInitializers2.types new file mode 100644 index 00000000000..7f955912e74 --- /dev/null +++ b/tests/baselines/reference/destructuringWithLiteralInitializers2.types @@ -0,0 +1,165 @@ +=== tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers2.ts === +function f00([x, y]) {} +>f00 : ([x, y]: [any, any]) => void +>x : any +>y : any + +function f01([x, y] = []) {} +>f01 : ([x, y]?: [any?, any?]) => void +>x : any +>y : any +>[] : [] + +function f02([x, y] = [1]) {} +>f02 : ([x, y]?: [number, any?]) => void +>x : number +>y : any +>[1] : [number] +>1 : 1 + +function f03([x, y] = [1, 'foo']) {} +>f03 : ([x, y]?: [number, string]) => void +>x : number +>y : string +>[1, 'foo'] : [number, string] +>1 : 1 +>'foo' : "foo" + +function f10([x = 0, y]) {} +>f10 : ([x, y]: [number | undefined, any]) => void +>x : number +>0 : 0 +>y : any + +function f11([x = 0, y] = []) {} +>f11 : ([x, y]?: [(number | undefined)?, any?]) => void +>x : number +>0 : 0 +>y : any +>[] : [] + +function f12([x = 0, y] = [1]) {} +>f12 : ([x, y]?: [number, any?]) => void +>x : number +>0 : 0 +>y : any +>[1] : [number] +>1 : 1 + +function f13([x = 0, y] = [1, 'foo']) {} +>f13 : ([x, y]?: [number, string]) => void +>x : number +>0 : 0 +>y : string +>[1, 'foo'] : [number, string] +>1 : 1 +>'foo' : "foo" + +function f20([x = 0, y = 'bar']) {} +>f20 : ([x, y]: [(number | undefined)?, (string | undefined)?]) => void +>x : number +>0 : 0 +>y : string +>'bar' : "bar" + +function f21([x = 0, y = 'bar'] = []) {} +>f21 : ([x, y]?: [(number | undefined)?, (string | undefined)?]) => void +>x : number +>0 : 0 +>y : string +>'bar' : "bar" +>[] : [] + +function f22([x = 0, y = 'bar'] = [1]) {} +>f22 : ([x, y]?: [number, (string | undefined)?]) => void +>x : number +>0 : 0 +>y : string +>'bar' : "bar" +>[1] : [number] +>1 : 1 + +function f23([x = 0, y = 'bar'] = [1, 'foo']) {} +>f23 : ([x, y]?: [number, string]) => void +>x : number +>0 : 0 +>y : string +>'bar' : "bar" +>[1, 'foo'] : [number, string] +>1 : 1 +>'foo' : "foo" + +declare const nx: number | undefined; +>nx : number | undefined + +declare const sx: string | undefined; +>sx : string | undefined + +function f30([x = 0, y = 'bar']) {} +>f30 : ([x, y]: [(number | undefined)?, (string | undefined)?]) => void +>x : number +>0 : 0 +>y : string +>'bar' : "bar" + +function f31([x = 0, y = 'bar'] = []) {} +>f31 : ([x, y]?: [(number | undefined)?, (string | undefined)?]) => void +>x : number +>0 : 0 +>y : string +>'bar' : "bar" +>[] : [] + +function f32([x = 0, y = 'bar'] = [nx]) {} +>f32 : ([x, y]?: [number | undefined, (string | undefined)?]) => void +>x : number +>0 : 0 +>y : string +>'bar' : "bar" +>[nx] : [number | undefined] +>nx : number | undefined + +function f33([x = 0, y = 'bar'] = [nx, sx]) {} +>f33 : ([x, y]?: [number | undefined, string | undefined]) => void +>x : number +>0 : 0 +>y : string +>'bar' : "bar" +>[nx, sx] : [number | undefined, string | undefined] +>nx : number | undefined +>sx : string | undefined + +function f40([x = 0, y = 'bar']) {} +>f40 : ([x, y]: [(number | undefined)?, (string | undefined)?]) => void +>x : number +>0 : 0 +>y : string +>'bar' : "bar" + +function f41([x = 0, y = 'bar'] = []) {} +>f41 : ([x, y]?: [(number | undefined)?, (string | undefined)?]) => void +>x : number +>0 : 0 +>y : string +>'bar' : "bar" +>[] : [] + +function f42([x = 0, y = 'bar'] = [sx]) {} +>f42 : ([x, y]?: [string | undefined, (string | undefined)?]) => void +>x : string | number +>0 : 0 +>y : string +>'bar' : "bar" +>[sx] : [string | undefined] +>sx : string | undefined + +function f43([x = 0, y = 'bar'] = [sx, nx]) {} +>f43 : ([x, y]?: [string | undefined, number | undefined]) => void +>x : string | number +>0 : 0 +>y : string | number +>'bar' : "bar" +>[sx, nx] : [string | undefined, number | undefined] +>sx : string | undefined +>nx : number | undefined + From 17153a6e5fb6bc34422a460b4d0246afd4cc0dd2 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Sun, 30 Jun 2019 08:54:48 -1000 Subject: [PATCH 26/36] Fix linting error --- src/compiler/checker.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 533231a575b..9c7a538172c 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -24259,7 +24259,7 @@ namespace ts { const elementTypes = arity ? type.typeArguments!.slice() : []; for (let i = arity; i < patternElements.length; i++) { const e = patternElements[i]; - if (i < patternElements.length - 1 || !(e.kind === SyntaxKind.BindingElement && (e).dotDotDotToken)) { + if (i < patternElements.length - 1 || !(e.kind === SyntaxKind.BindingElement && e.dotDotDotToken)) { elementTypes.push(!isOmittedExpression(e) && hasDefaultValue(e) ? getTypeFromBindingElement(e, /*includePatternInType*/ false, /*reportErrors*/ false) : anyType); if (!isOmittedExpression(e) && !hasDefaultValue(e)) { reportImplicitAny(e, anyType); From 27b8c45522a17a31f2d45a6bc424242fa2a9a60e Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Mon, 1 Jul 2019 10:52:32 -0700 Subject: [PATCH 27/36] Update baselines --- ...nalNoInfiniteInstantiationDepth.errors.txt | 170 ++++++++---------- ...ferredInferenceAllowsAssignment.errors.txt | 170 ++++++++---------- 2 files changed, 152 insertions(+), 188 deletions(-) diff --git a/tests/baselines/reference/circularlyConstrainedMappedTypeContainingConditionalNoInfiniteInstantiationDepth.errors.txt b/tests/baselines/reference/circularlyConstrainedMappedTypeContainingConditionalNoInfiniteInstantiationDepth.errors.txt index 2c5fc84b37c..c7a323f1283 100644 --- a/tests/baselines/reference/circularlyConstrainedMappedTypeContainingConditionalNoInfiniteInstantiationDepth.errors.txt +++ b/tests/baselines/reference/circularlyConstrainedMappedTypeContainingConditionalNoInfiniteInstantiationDepth.errors.txt @@ -15,53 +15,44 @@ tests/cases/compiler/circularlyConstrainedMappedTypeContainingConditionalNoInfin Type 'GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. Type 'GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. Type 'GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'GetProps[Extract>] | GetProps[Extract>] | GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type '(Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type '(TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]) | GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[keyof TInjectedProps & Extract>] | GetProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type '(TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]) | GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] | GetProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type '(TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string]) | GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[keyof TInjectedProps & string] | GetProps[keyof TInjectedProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[keyof TInjectedProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'TInjectedProps[keyof TInjectedProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'P extends keyof TInjectedProps ? TInjectedProps[P] extends GetProps[P] ? GetProps[P] : TInjectedProps[P] : GetProps[P]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[Extract>] | GetProps[Extract>] | GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type '(Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type '(TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]) | GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[keyof TInjectedProps & Extract>] | GetProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type '(TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]) | GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] | GetProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'GetProps[string] | (TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'P extends keyof TInjectedProps ? TInjectedProps[P] extends GetProps[P] ? GetProps[P] : TInjectedProps[P] : GetProps[P]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. ==== tests/cases/compiler/circularlyConstrainedMappedTypeContainingConditionalNoInfiniteInstantiationDepth.ts (1 errors) ==== @@ -146,51 +137,42 @@ tests/cases/compiler/circularlyConstrainedMappedTypeContainingConditionalNoInfin !!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. !!! error TS2344: Type 'GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. !!! error TS2344: Type 'GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'GetProps[Extract>] | GetProps[Extract>] | GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type '(Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type '(TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]) | GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>] | GetProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type '(TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]) | GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] | GetProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type '(TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string]) | GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & string] | GetProps[keyof TInjectedProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'P extends keyof TInjectedProps ? TInjectedProps[P] extends GetProps[P] ? GetProps[P] : TInjectedProps[P] : GetProps[P]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[Extract>] | GetProps[Extract>] | GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type '(Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type '(TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]) | GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>] | GetProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type '(TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]) | GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] | GetProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'GetProps[string] | (TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'P extends keyof TInjectedProps ? TInjectedProps[P] extends GetProps[P] ? GetProps[P] : TInjectedProps[P] : GetProps[P]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. \ No newline at end of file diff --git a/tests/baselines/reference/reactReduxLikeDeferredInferenceAllowsAssignment.errors.txt b/tests/baselines/reference/reactReduxLikeDeferredInferenceAllowsAssignment.errors.txt index 6267b5299ad..0556ae25c91 100644 --- a/tests/baselines/reference/reactReduxLikeDeferredInferenceAllowsAssignment.errors.txt +++ b/tests/baselines/reference/reactReduxLikeDeferredInferenceAllowsAssignment.errors.txt @@ -15,53 +15,44 @@ tests/cases/compiler/reactReduxLikeDeferredInferenceAllowsAssignment.ts(76,50): Type 'GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. Type 'GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. Type 'GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'GetProps[Extract>] | GetProps[Extract>] | GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type '(Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type '(TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]) | GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[keyof TInjectedProps & Extract>] | GetProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type '(TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]) | GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] | GetProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type '(TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string]) | GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[keyof TInjectedProps & string] | GetProps[keyof TInjectedProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[keyof TInjectedProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. - Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'TInjectedProps[keyof TInjectedProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. - Type 'P extends keyof TInjectedProps ? TInjectedProps[P] extends GetProps[P] ? GetProps[P] : TInjectedProps[P] : GetProps[P]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[Extract>] | GetProps[Extract>] | GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type '(Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type '(TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]) | GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[keyof TInjectedProps & Extract>] | GetProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type '(TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]) | GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] | GetProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'GetProps[string] | (TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. + Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. + Type 'P extends keyof TInjectedProps ? TInjectedProps[P] extends GetProps[P] ? GetProps[P] : TInjectedProps[P] : GetProps[P]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. ==== tests/cases/compiler/reactReduxLikeDeferredInferenceAllowsAssignment.ts (1 errors) ==== @@ -159,53 +150,44 @@ tests/cases/compiler/reactReduxLikeDeferredInferenceAllowsAssignment.ts(76,50): !!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. !!! error TS2344: Type 'GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. !!! error TS2344: Type 'GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'GetProps[Extract>] | GetProps[Extract>] | GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type '(Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type '(TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]) | GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>] | GetProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type '(TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]) | GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] | GetProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type '(TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string]) | GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & string] | GetProps[keyof TInjectedProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. -!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. -!!! error TS2344: Type 'P extends keyof TInjectedProps ? TInjectedProps[P] extends GetProps[P] ? GetProps[P] : TInjectedProps[P] : GetProps[P]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[Extract>] | GetProps[Extract>] | GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type '(Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]) | (Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type '(TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]) | GetProps[Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>] | GetProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type '(TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]) | GetProps[keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] | GetProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'TInjectedProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'GetProps[string] | (TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string])' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'GetProps[string]' is not assignable to type '(TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never) | undefined'. +!!! error TS2344: Type 'GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & string] extends GetProps[keyof TInjectedProps & string] ? GetProps[keyof TInjectedProps & string] : TInjectedProps[keyof TInjectedProps & string] : GetProps[string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'keyof GetProps & string extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & keyof GetProps & string] extends GetProps[keyof TInjectedProps & keyof GetProps & string] ? GetProps[keyof TInjectedProps & keyof GetProps & string] : TInjectedProps[keyof TInjectedProps & keyof GetProps & string] : GetProps[keyof GetProps & string]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[keyof TInjectedProps & Extract>] extends GetProps[keyof TInjectedProps & Extract>] ? GetProps[keyof TInjectedProps & Extract>] : TInjectedProps[keyof TInjectedProps & Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'Extract> extends keyof TInjectedProps ? TInjectedProps[Extract>] extends GetProps[Extract>] ? GetProps[Extract>] : TInjectedProps[Extract>] : GetProps[Extract>]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. +!!! error TS2344: Type 'P extends keyof TInjectedProps ? TInjectedProps[P] extends GetProps[P] ? GetProps[P] : TInjectedProps[P] : GetProps[P]' is not assignable to type 'TInjectedProps[P] extends GetProps[P] ? GetProps[P] : never'. >; declare const connect: { From 4382d7e7b28083f4ad6e06a71f778e6f63fa5fdd Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Mon, 1 Jul 2019 11:10:43 -0700 Subject: [PATCH 28/36] Fix strict bugs in user pr script --- scripts/open-user-pr.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/scripts/open-user-pr.ts b/scripts/open-user-pr.ts index 23e4bb951d7..1959ee4aaa0 100644 --- a/scripts/open-user-pr.ts +++ b/scripts/open-user-pr.ts @@ -1,4 +1,5 @@ /// +/// // Must reference esnext.asynciterable lib, since octokit uses AsyncIterable internally import Octokit = require("@octokit/rest"); import {runSequence} from "./run-sequence"; @@ -29,7 +30,7 @@ gh.authenticate({ token: process.argv[2] }); gh.pulls.create({ - owner: process.env.TARGET_FORK, + owner: process.env.TARGET_FORK!, repo: "TypeScript", maintainer_can_modify: true, title: `🤖 User test baselines have changed` + (process.env.TARGET_BRANCH ? ` for ${process.env.TARGET_BRANCH}` : ""), @@ -45,9 +46,9 @@ cc ${reviewers.map(r => "@" + r).join(" ")}`, console.log(`Pull request ${num} created.`); if (!process.env.SOURCE_ISSUE) { await gh.pulls.createReviewRequest({ - owner: process.env.TARGET_FORK, + owner: process.env.TARGET_FORK!, repo: "TypeScript", - number: num, + pull_number: num, reviewers, }); } From ff81d5261e4c36407d8e14b1e250d25cdc4885fe Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Mon, 1 Jul 2019 13:13:44 -0700 Subject: [PATCH 29/36] Elide the exact node version rush complains about from the docker output (#32204) --- src/testRunner/externalCompileRunner.ts | 2 +- tests/baselines/reference/docker/azure-sdk.log | 2 +- tests/baselines/reference/docker/office-ui-fabric.log | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/testRunner/externalCompileRunner.ts b/src/testRunner/externalCompileRunner.ts index 1a027f975da..4be0d1a67ab 100644 --- a/src/testRunner/externalCompileRunner.ts +++ b/src/testRunner/externalCompileRunner.ts @@ -201,7 +201,7 @@ function sanitizeTimestamps(result: string): string { function sanitizeVersionSpecifiers(result: string): string { return result .replace(/\d+.\d+.\d+-insiders.\d\d\d\d\d\d\d\d/g, "X.X.X-insiders.xxxxxxxx") - .replace(/([@v])\d+\.\d+\.\d+/g, "$1X.X.X"); + .replace(/([@v\()])\d+\.\d+\.\d+/g, "$1X.X.X"); } /** diff --git a/tests/baselines/reference/docker/azure-sdk.log b/tests/baselines/reference/docker/azure-sdk.log index 0069c7e433e..011937533de 100644 --- a/tests/baselines/reference/docker/azure-sdk.log +++ b/tests/baselines/reference/docker/azure-sdk.log @@ -82,7 +82,7 @@ rush rebuild - Errors! ( ? seconds) Standard error: -Your version of Node.js (12.4.0) has not been tested with this release of Rush. The Rush team will not accept issue reports for it. Please consider upgrading Rush or downgrading Node.js. +Your version of Node.js (X.X.X) has not been tested with this release of Rush. The Rush team will not accept issue reports for it. Please consider upgrading Rush or downgrading Node.js. XX of XX: [@azure/service-bus] completed with warnings in ? seconds XX of XX: [@azure/core-amqp] failed to build! XX of XX: [@azure/event-hubs] blocked by [@azure/core-amqp]! diff --git a/tests/baselines/reference/docker/office-ui-fabric.log b/tests/baselines/reference/docker/office-ui-fabric.log index 3657e61b3be..f2b746a7e28 100644 --- a/tests/baselines/reference/docker/office-ui-fabric.log +++ b/tests/baselines/reference/docker/office-ui-fabric.log @@ -311,7 +311,7 @@ rush rebuild - Errors! ( ? seconds) Standard error: -Your version of Node.js (12.4.0) has not been tested with this release of Rush. The Rush team will not accept issue reports for it. Please consider upgrading Rush or downgrading Node.js. +Your version of Node.js (X.X.X) has not been tested with this release of Rush. The Rush team will not accept issue reports for it. Please consider upgrading Rush or downgrading Node.js. XX of XX: [@uifabric/codepen-loader] completed with warnings in ? seconds XX of XX: [@uifabric/set-version] completed with warnings in ? seconds XX of XX: [@uifabric/merge-styles] completed with warnings in ? seconds From c91e147ddaa49850e8e8199da7b92bad623a50e4 Mon Sep 17 00:00:00 2001 From: TypeScript Bot Date: Mon, 1 Jul 2019 13:15:21 -0700 Subject: [PATCH 30/36] Update user baselines (#32195) --- tests/baselines/reference/user/assert.log | 3 +- .../user/chrome-devtools-frontend.log | 12 ++++--- tests/baselines/reference/user/lodash.log | 36 ++++++++++++------- tests/baselines/reference/user/prettier.log | 4 ++- tests/baselines/reference/user/puppeteer.log | 3 +- tests/baselines/reference/user/uglify-js.log | 4 ++- 6 files changed, 42 insertions(+), 20 deletions(-) diff --git a/tests/baselines/reference/user/assert.log b/tests/baselines/reference/user/assert.log index 3870753f663..223098ee682 100644 --- a/tests/baselines/reference/user/assert.log +++ b/tests/baselines/reference/user/assert.log @@ -14,7 +14,8 @@ node_modules/assert/test.js(141,10): error TS2339: Property 'b' does not exist o node_modules/assert/test.js(142,10): error TS2339: Property 'b' does not exist on type 'number[]'. node_modules/assert/test.js(143,10): error TS2339: Property 'a' does not exist on type 'number[]'. node_modules/assert/test.js(149,5): error TS2552: Cannot find name 'test'. Did you mean 'tests'? -node_modules/assert/test.js(157,51): error TS2349: Cannot invoke an expression whose type lacks a call signature. Type 'never' has no compatible call signatures. +node_modules/assert/test.js(157,51): error TS2349: This expression is not callable. + Type 'never' has no call signatures. node_modules/assert/test.js(161,5): error TS2552: Cannot find name 'test'. Did you mean 'tests'? node_modules/assert/test.js(168,5): error TS2593: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha` and then add `jest` or `mocha` to the types field in your tsconfig. node_modules/assert/test.js(182,5): error TS2593: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha` and then add `jest` or `mocha` to the types field in your tsconfig. diff --git a/tests/baselines/reference/user/chrome-devtools-frontend.log b/tests/baselines/reference/user/chrome-devtools-frontend.log index bd6fd45ac22..d298b174de0 100644 --- a/tests/baselines/reference/user/chrome-devtools-frontend.log +++ b/tests/baselines/reference/user/chrome-devtools-frontend.log @@ -28,7 +28,8 @@ node_modules/chrome-devtools-frontend/front_end/Runtime.js(280,5): error TS2322: node_modules/chrome-devtools-frontend/front_end/Runtime.js(283,12): error TS2554: Expected 2-3 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/Runtime.js(527,49): error TS2352: Conversion of type 'Window' to type 'new () => any' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first. Type 'Window' provides no match for the signature 'new (): any'. -node_modules/chrome-devtools-frontend/front_end/Runtime.js(539,20): error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature. +node_modules/chrome-devtools-frontend/front_end/Runtime.js(539,24): error TS2351: This expression is not constructable. + Type 'Function' has no construct signatures. node_modules/chrome-devtools-frontend/front_end/Runtime.js(693,7): error TS2322: Type 'Promise' is not assignable to type 'Promise'. Type 'boolean' is not assignable to type 'undefined'. node_modules/chrome-devtools-frontend/front_end/Runtime.js(705,5): error TS2322: Type 'Promise' is not assignable to type 'Promise'. @@ -6104,7 +6105,8 @@ node_modules/chrome-devtools-frontend/front_end/event_listeners/EventListenersUt node_modules/chrome-devtools-frontend/front_end/event_listeners/EventListenersUtils.js(295,16): error TS2339: Property 'devtoolsFrameworkEventListeners' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/event_listeners/EventListenersUtils.js(295,68): error TS2339: Property 'devtoolsFrameworkEventListeners' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/event_listeners/EventListenersUtils.js(296,41): error TS2339: Property 'devtoolsFrameworkEventListeners' does not exist on type 'Window'. -node_modules/chrome-devtools-frontend/front_end/event_listeners/EventListenersUtils.js(306,37): error TS2349: Cannot invoke an expression whose type lacks a call signature. Type '((callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any) => U[]) | ((callbackfn: (value: { handler: any; useCapture: boolean; passive: boolean; once: boolean; type: string; }, index: number, array: { ...; }[]) => U, thisArg?: any) => U[])' has no compatible call signatures. +node_modules/chrome-devtools-frontend/front_end/event_listeners/EventListenersUtils.js(306,66): error TS2349: This expression is not callable. + Each member of the union type '((callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any) => U[]) | ((callbackfn: (value: { handler: any; useCapture: boolean; passive: boolean; once: boolean; type: string; }, index: number, array: { ...; }[]) => U, thisArg?: any) => U[])' has signatures, but none of those signatures are compatible with each other. node_modules/chrome-devtools-frontend/front_end/event_listeners/EventListenersUtils.js(324,5): error TS2741: Property 'internalHandlers' is missing in type '{ eventListeners: any[]; }' but required in type '{ eventListeners: any[]; internalHandlers: (() => any)[]; }'. node_modules/chrome-devtools-frontend/front_end/event_listeners/EventListenersUtils.js(345,33): error TS2694: Namespace 'EventListeners' has no exported member 'EventListenerObjectInInspectedPage'. node_modules/chrome-devtools-frontend/front_end/event_listeners/EventListenersUtils.js(420,32): error TS2352: Conversion of type '{ fn: any; data: any; _data: any; }' to type '(arg0: Node) => any' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first. @@ -8941,7 +8943,8 @@ node_modules/chrome-devtools-frontend/front_end/profiler/ProfileDataGrid.js(131, Property '_populated' does not exist on type 'ProfileDataGridNode'. node_modules/chrome-devtools-frontend/front_end/profiler/ProfileDataGrid.js(133,15): error TS2339: Property '_populated' does not exist on type 'ProfileDataGridNode | ProfileDataGridTree'. Property '_populated' does not exist on type 'ProfileDataGridNode'. -node_modules/chrome-devtools-frontend/front_end/profiler/ProfileDataGrid.js(140,7): error TS2349: Cannot invoke an expression whose type lacks a call signature. Type '((comparator: (arg0: T, arg1: T) => any, force: boolean) => any) | ((comparator: (arg0: T, arg1: T) => any, force: boolean) => void)' has no compatible call signatures. +node_modules/chrome-devtools-frontend/front_end/profiler/ProfileDataGrid.js(140,17): error TS2349: This expression is not callable. + Each member of the union type '((comparator: (arg0: T, arg1: T) => any, force: boolean) => any) | ((comparator: (arg0: T, arg1: T) => any, force: boolean) => void)' has signatures, but none of those signatures are compatible with each other. node_modules/chrome-devtools-frontend/front_end/profiler/ProfileDataGrid.js(153,49): error TS2339: Property '_searchMatchedSelfColumn' does not exist on type 'ProfileDataGridNode'. node_modules/chrome-devtools-frontend/front_end/profiler/ProfileDataGrid.js(158,49): error TS2339: Property '_searchMatchedTotalColumn' does not exist on type 'ProfileDataGridNode'. node_modules/chrome-devtools-frontend/front_end/profiler/ProfileDataGrid.js(163,49): error TS2339: Property '_searchMatchedFunctionColumn' does not exist on type 'ProfileDataGridNode'. @@ -10085,7 +10088,8 @@ node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(955,42): e node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(976,41): error TS2694: Namespace 'SDK.NetworkManager' has no exported member 'BlockedPattern'. node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(1019,52): error TS2694: Namespace 'SDK.MultitargetNetworkManager' has no exported member 'InterceptionPattern'. node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(1020,45): error TS2694: Namespace 'SDK.MultitargetNetworkManager' has no exported member 'RequestInterceptor'. -node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(1060,13): error TS2349: Cannot invoke an expression whose type lacks a call signature. Type '{}' has no compatible call signatures. +node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(1060,13): error TS2349: This expression is not callable. + Type '{}' has no call signatures. node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(1084,19): error TS2339: Property 'networkAgent' does not exist on type 'Target'. node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(1089,14): error TS7014: Function type, which lacks return-type annotation, implicitly has an 'any' return type. node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(1101,35): error TS2345: Argument of type '{}' is not assignable to parameter of type '{ [x: string]: string; }'. diff --git a/tests/baselines/reference/user/lodash.log b/tests/baselines/reference/user/lodash.log index 18428758c6f..4ff6cd2fa20 100644 --- a/tests/baselines/reference/user/lodash.log +++ b/tests/baselines/reference/user/lodash.log @@ -37,7 +37,8 @@ node_modules/lodash/_baseDifference.js(43,5): error TS2740: Type 'SetCache' is m node_modules/lodash/_baseDifference.js(60,42): error TS2554: Expected 2 arguments, but got 3. node_modules/lodash/_baseFlatten.js(19,29): error TS2322: Type '(value: any) => boolean' is not assignable to type 'boolean | undefined'. Type '(value: any) => boolean' is not assignable to type 'true'. -node_modules/lodash/_baseFlatten.js(24,22): error TS2349: Cannot invoke an expression whose type lacks a call signature. Type 'Boolean' has no compatible call signatures. +node_modules/lodash/_baseFlatten.js(24,22): error TS2349: This expression is not callable. + Type 'Boolean' has no call signatures. node_modules/lodash/_baseFlatten.js(24,22): error TS2532: Object is possibly 'undefined'. node_modules/lodash/_baseFlatten.js(24,22): error TS2722: Cannot invoke an object which is possibly 'undefined'. node_modules/lodash/_baseHas.js(16,56): error TS2345: Argument of type 'string | any[]' is not assignable to parameter of type 'string | number | symbol'. @@ -76,7 +77,8 @@ node_modules/lodash/_baseUniq.js(33,43): error TS2554: Expected 0 arguments, but node_modules/lodash/_baseUniq.js(39,5): error TS2322: Type 'SetCache' is not assignable to type 'any[]'. node_modules/lodash/_baseUniq.js(62,40): error TS2554: Expected 2 arguments, but got 3. node_modules/lodash/_baseWrapperValue.js(18,21): error TS2339: Property 'value' does not exist on type 'LazyWrapper'. -node_modules/lodash/_cloneArrayBuffer.js(11,16): error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature. +node_modules/lodash/_cloneArrayBuffer.js(11,20): error TS2351: This expression is not constructable. + Type 'Function' has no construct signatures. node_modules/lodash/_cloneBuffer.js(4,69): error TS2339: Property 'nodeType' does not exist on type '(buffer: any, isDeep?: boolean | undefined) => any'. node_modules/lodash/_cloneBuffer.js(7,80): error TS2339: Property 'nodeType' does not exist on type '{ "../../../tests/cases/user/lodash/node_modules/lodash/_cloneBuffer": (buffer: any, isDeep?: boolean | undefined) => any; }'. node_modules/lodash/_cloneBuffer.js(22,14): error TS2577: Return type annotation circularly references itself. @@ -85,14 +87,22 @@ node_modules/lodash/_copySymbols.js(13,40): error TS2554: Expected 0 arguments, node_modules/lodash/_copySymbolsIn.js(13,42): error TS2554: Expected 0 arguments, but got 1. node_modules/lodash/_createAggregator.js(19,60): error TS2554: Expected 0-1 arguments, but got 2. node_modules/lodash/_createCompounder.js(20,24): error TS2554: Expected 3 arguments, but got 1. -node_modules/lodash/_createCtor.js(19,22): error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature. -node_modules/lodash/_createCtor.js(20,22): error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature. -node_modules/lodash/_createCtor.js(21,22): error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature. -node_modules/lodash/_createCtor.js(22,22): error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature. -node_modules/lodash/_createCtor.js(23,22): error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature. -node_modules/lodash/_createCtor.js(24,22): error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature. -node_modules/lodash/_createCtor.js(25,22): error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature. -node_modules/lodash/_createCtor.js(26,22): error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature. +node_modules/lodash/_createCtor.js(19,26): error TS2351: This expression is not constructable. + Type 'Function' has no construct signatures. +node_modules/lodash/_createCtor.js(20,26): error TS2351: This expression is not constructable. + Type 'Function' has no construct signatures. +node_modules/lodash/_createCtor.js(21,26): error TS2351: This expression is not constructable. + Type 'Function' has no construct signatures. +node_modules/lodash/_createCtor.js(22,26): error TS2351: This expression is not constructable. + Type 'Function' has no construct signatures. +node_modules/lodash/_createCtor.js(23,26): error TS2351: This expression is not constructable. + Type 'Function' has no construct signatures. +node_modules/lodash/_createCtor.js(24,26): error TS2351: This expression is not constructable. + Type 'Function' has no construct signatures. +node_modules/lodash/_createCtor.js(25,26): error TS2351: This expression is not constructable. + Type 'Function' has no construct signatures. +node_modules/lodash/_createCtor.js(26,26): error TS2351: This expression is not constructable. + Type 'Function' has no construct signatures. node_modules/lodash/_createCurry.js(37,46): error TS2339: Property 'placeholder' does not exist on type '(...args: any[]) => any'. node_modules/lodash/_createFind.js(16,46): error TS2554: Expected 0-1 arguments, but got 2. node_modules/lodash/_createFind.js(21,34): error TS2454: Variable 'iteratee' is used before being assigned. @@ -143,7 +153,8 @@ node_modules/lodash/_getRawTag.js(36,7): error TS2454: Variable 'unmasked' is us node_modules/lodash/_getSymbolsIn.js(19,34): error TS2554: Expected 0 arguments, but got 1. node_modules/lodash/_hasPath.js(35,50): error TS2454: Variable 'key' is used before being assigned. node_modules/lodash/_hashDelete.js(7,20): error TS8024: JSDoc '@param' tag has name 'hash', but there is no parameter with that name. -node_modules/lodash/_initCloneArray.js(16,16): error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature. +node_modules/lodash/_initCloneArray.js(16,20): error TS2351: This expression is not constructable. + Type 'Function' has no construct signatures. node_modules/lodash/_initCloneArray.js(20,26): error TS2339: Property 'index' does not exist on type 'any[]'. node_modules/lodash/_initCloneArray.js(21,26): error TS2339: Property 'input' does not exist on type 'any[]'. node_modules/lodash/_insertWrapDetails.js(10,5): error TS1223: 'returns' tag already specified. @@ -190,7 +201,8 @@ node_modules/lodash/core.js(68,58): error TS2339: Property 'Object' does not exi node_modules/lodash/core.js(77,82): error TS2339: Property 'nodeType' does not exist on type 'NodeModule'. node_modules/lodash/core.js(540,31): error TS2322: Type '(value: any) => boolean' is not assignable to type 'boolean | undefined'. Type '(value: any) => boolean' is not assignable to type 'true'. -node_modules/lodash/core.js(545,24): error TS2349: Cannot invoke an expression whose type lacks a call signature. Type 'Boolean' has no compatible call signatures. +node_modules/lodash/core.js(545,24): error TS2349: This expression is not callable. + Type 'Boolean' has no call signatures. node_modules/lodash/core.js(545,24): error TS2532: Object is possibly 'undefined'. node_modules/lodash/core.js(545,24): error TS2722: Cannot invoke an object which is possibly 'undefined'. node_modules/lodash/core.js(664,42): error TS2345: Argument of type 'boolean' is not assignable to parameter of type 'number'. diff --git a/tests/baselines/reference/user/prettier.log b/tests/baselines/reference/user/prettier.log index 6ee6e91cb6b..c69f88a4a78 100644 --- a/tests/baselines/reference/user/prettier.log +++ b/tests/baselines/reference/user/prettier.log @@ -81,7 +81,9 @@ src/language-html/ast.js(90,17): error TS2339: Property 'namespace' does not exi src/language-html/ast.js(90,34): error TS2339: Property 'namespace' does not exist on type 'Node'. src/language-html/ast.js(90,57): error TS2339: Property 'name' does not exist on type 'Node'. src/language-html/ast.js(90,69): error TS2339: Property 'name' does not exist on type 'Node'. -src/language-html/conditional-comment.js(23,16): error TS2349: Cannot invoke an expression whose type lacks a call signature. Type 'RegExp | ((node: any) => { type: string; sourceSpan: any; })' has no compatible call signatures. +src/language-html/conditional-comment.js(23,16): error TS2349: This expression is not callable. + Not all constituents of type 'RegExp | ((node: any) => { type: string; sourceSpan: any; })' are callable. + Type 'RegExp' has no call signatures. src/language-html/index.js(8,26): error TS2307: Cannot find module 'linguist-languages/data/html'. src/language-html/index.js(8,59): error TS2345: Argument of type '{ override: { name: string; since: string; parsers: string[]; vscodeLanguageIds: string[]; extensions: string[]; filenames: never[]; }; }' is not assignable to parameter of type '{ extend: any; override: any; }'. Property 'extend' is missing in type '{ override: { name: string; since: string; parsers: string[]; vscodeLanguageIds: string[]; extensions: string[]; filenames: never[]; }; }' but required in type '{ extend: any; override: any; }'. diff --git a/tests/baselines/reference/user/puppeteer.log b/tests/baselines/reference/user/puppeteer.log index 6aa8c77000a..b60877f29ad 100644 --- a/tests/baselines/reference/user/puppeteer.log +++ b/tests/baselines/reference/user/puppeteer.log @@ -58,7 +58,8 @@ lib/Page.js(189,15): error TS2503: Cannot find namespace 'Protocol'. lib/Page.js(284,15): error TS2503: Cannot find namespace 'Protocol'. lib/Page.js(369,20): error TS2503: Cannot find namespace 'Protocol'. lib/Page.js(432,7): error TS2740: Type '(...args: any[]) => Promise' is missing the following properties from type 'Window': Blob, TextDecoder, TextEncoder, URL, and 232 more. -lib/Page.js(442,9): error TS2349: Cannot invoke an expression whose type lacks a call signature. Type 'Window' has no compatible call signatures. +lib/Page.js(442,9): error TS2349: This expression is not callable. + Type 'Window' has no call signatures. lib/Page.js(478,15): error TS2503: Cannot find namespace 'Protocol'. lib/Page.js(488,22): error TS2503: Cannot find namespace 'Protocol'. lib/Page.js(501,15): error TS2503: Cannot find namespace 'Protocol'. diff --git a/tests/baselines/reference/user/uglify-js.log b/tests/baselines/reference/user/uglify-js.log index 9b8f9ce9ed0..a01073ce3a2 100644 --- a/tests/baselines/reference/user/uglify-js.log +++ b/tests/baselines/reference/user/uglify-js.log @@ -11,7 +11,9 @@ node_modules/uglify-js/lib/compress.js(184,42): error TS2554: Expected 0 argumen node_modules/uglify-js/lib/compress.js(535,41): error TS2554: Expected 0 arguments, but got 1. node_modules/uglify-js/lib/compress.js(861,33): error TS2554: Expected 0 arguments, but got 1. node_modules/uglify-js/lib/compress.js(1121,38): error TS2339: Property 'parent' does not exist on type 'TreeTransformer'. -node_modules/uglify-js/lib/compress.js(1135,51): error TS2349: Cannot invoke an expression whose type lacks a call signature. Type 'true | ((node: any) => any)' has no compatible call signatures. +node_modules/uglify-js/lib/compress.js(1135,51): error TS2349: This expression is not callable. + Not all constituents of type 'true | ((node: any) => any)' are callable. + Type 'true' has no call signatures. node_modules/uglify-js/lib/compress.js(1199,53): error TS2339: Property 'parent' does not exist on type 'TreeTransformer'. node_modules/uglify-js/lib/compress.js(1240,112): error TS2454: Variable 'args' is used before being assigned. node_modules/uglify-js/lib/compress.js(1241,29): error TS2532: Object is possibly 'undefined'. From 3765651d826a504bc80b3a69024c0d9a25e7e114 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Mon, 1 Jul 2019 13:39:18 -0700 Subject: [PATCH 31/36] Fix not emitted statement in then clauses producing syntactically invalid output (#32010) * Fix not emitted statement in then clauses producing syntactically invalid output * Refactor to common code, apply to all embedded statements --- src/compiler/factory.ts | 24 +++++---- tests/baselines/reference/constEnum4.js | 3 ++ ...EmbeddedStatementsReplacedWithSemicolon.js | 47 +++++++++++++++++ ...dedStatementsReplacedWithSemicolon.symbols | 40 +++++++++++++++ ...eddedStatementsReplacedWithSemicolon.types | 51 +++++++++++++++++++ .../reference/labeledStatementWithLabel.js | 6 +-- .../labeledStatementWithLabel_es2015.js | 6 +-- .../labeledStatementWithLabel_strict.js | 6 +-- ...EmbeddedStatementsReplacedWithSemicolon.ts | 24 +++++++++ 9 files changed, 189 insertions(+), 18 deletions(-) create mode 100644 tests/baselines/reference/elidedEmbeddedStatementsReplacedWithSemicolon.js create mode 100644 tests/baselines/reference/elidedEmbeddedStatementsReplacedWithSemicolon.symbols create mode 100644 tests/baselines/reference/elidedEmbeddedStatementsReplacedWithSemicolon.types create mode 100644 tests/cases/compiler/elidedEmbeddedStatementsReplacedWithSemicolon.ts diff --git a/src/compiler/factory.ts b/src/compiler/factory.ts index f67ec39b0a4..f88950f531a 100644 --- a/src/compiler/factory.ts +++ b/src/compiler/factory.ts @@ -1544,8 +1544,8 @@ namespace ts { export function createIf(expression: Expression, thenStatement: Statement, elseStatement?: Statement) { const node = createSynthesizedNode(SyntaxKind.IfStatement); node.expression = expression; - node.thenStatement = thenStatement; - node.elseStatement = elseStatement; + node.thenStatement = asEmbeddedStatement(thenStatement); + node.elseStatement = asEmbeddedStatement(elseStatement); return node; } @@ -1559,7 +1559,7 @@ namespace ts { export function createDo(statement: Statement, expression: Expression) { const node = createSynthesizedNode(SyntaxKind.DoStatement); - node.statement = statement; + node.statement = asEmbeddedStatement(statement); node.expression = expression; return node; } @@ -1574,7 +1574,7 @@ namespace ts { export function createWhile(expression: Expression, statement: Statement) { const node = createSynthesizedNode(SyntaxKind.WhileStatement); node.expression = expression; - node.statement = statement; + node.statement = asEmbeddedStatement(statement); return node; } @@ -1590,7 +1590,7 @@ namespace ts { node.initializer = initializer; node.condition = condition; node.incrementor = incrementor; - node.statement = statement; + node.statement = asEmbeddedStatement(statement); return node; } @@ -1607,7 +1607,7 @@ namespace ts { const node = createSynthesizedNode(SyntaxKind.ForInStatement); node.initializer = initializer; node.expression = expression; - node.statement = statement; + node.statement = asEmbeddedStatement(statement); return node; } @@ -1624,7 +1624,7 @@ namespace ts { node.awaitModifier = awaitModifier; node.initializer = initializer; node.expression = expression; - node.statement = statement; + node.statement = asEmbeddedStatement(statement); return node; } @@ -1676,7 +1676,7 @@ namespace ts { export function createWith(expression: Expression, statement: Statement) { const node = createSynthesizedNode(SyntaxKind.WithStatement); node.expression = expression; - node.statement = statement; + node.statement = asEmbeddedStatement(statement); return node; } @@ -1704,7 +1704,7 @@ namespace ts { export function createLabel(label: string | Identifier, statement: Statement) { const node = createSynthesizedNode(SyntaxKind.LabeledStatement); node.label = asName(label); - node.statement = statement; + node.statement = asEmbeddedStatement(statement); return node; } @@ -3080,6 +3080,12 @@ namespace ts { return typeof value === "number" ? createToken(value) : value; } + function asEmbeddedStatement(statement: T): T | EmptyStatement; + function asEmbeddedStatement(statement: T | undefined): T | EmptyStatement | undefined; + function asEmbeddedStatement(statement: T | undefined): T | EmptyStatement | undefined { + return statement && isNotEmittedStatement(statement) ? setTextRange(setOriginalNode(createEmptyStatement(), statement), statement) : statement; + } + /** * Clears any EmitNode entries from parse-tree nodes. * @param sourceFile A source file. diff --git a/tests/baselines/reference/constEnum4.js b/tests/baselines/reference/constEnum4.js index dc7c4b0e593..3c70df17dd3 100644 --- a/tests/baselines/reference/constEnum4.js +++ b/tests/baselines/reference/constEnum4.js @@ -9,5 +9,8 @@ else //// [constEnum4.js] if (1) + ; else if (2) + ; else + ; diff --git a/tests/baselines/reference/elidedEmbeddedStatementsReplacedWithSemicolon.js b/tests/baselines/reference/elidedEmbeddedStatementsReplacedWithSemicolon.js new file mode 100644 index 00000000000..00ed2e49aa8 --- /dev/null +++ b/tests/baselines/reference/elidedEmbeddedStatementsReplacedWithSemicolon.js @@ -0,0 +1,47 @@ +//// [elidedEmbeddedStatementsReplacedWithSemicolon.ts] +if (1) + const enum A {} +else + const enum B {} + +do + const enum C {} +while (0); + +while (0) + const enum D {} + +for (;0;) + const enum E {} + +for (let _ in []) + const enum F {} + +for (let _ of []) + const enum G {} + +// @ts-ignore suppress `with` statement error +with (window) + const enum H {} + +//// [elidedEmbeddedStatementsReplacedWithSemicolon.js] +if (1) + ; +else + ; +do + ; +while (0); +while (0) + ; +for (; 0;) + ; +for (var _ in []) + ; +for (var _i = 0, _a = []; _i < _a.length; _i++) { + var _ = _a[_i]; + ; +} +// @ts-ignore suppress `with` statement error +with (window) + ; diff --git a/tests/baselines/reference/elidedEmbeddedStatementsReplacedWithSemicolon.symbols b/tests/baselines/reference/elidedEmbeddedStatementsReplacedWithSemicolon.symbols new file mode 100644 index 00000000000..e32425754f8 --- /dev/null +++ b/tests/baselines/reference/elidedEmbeddedStatementsReplacedWithSemicolon.symbols @@ -0,0 +1,40 @@ +=== tests/cases/compiler/elidedEmbeddedStatementsReplacedWithSemicolon.ts === +if (1) + const enum A {} +>A : Symbol(A, Decl(elidedEmbeddedStatementsReplacedWithSemicolon.ts, 0, 6)) + +else + const enum B {} +>B : Symbol(B, Decl(elidedEmbeddedStatementsReplacedWithSemicolon.ts, 2, 4)) + +do + const enum C {} +>C : Symbol(C, Decl(elidedEmbeddedStatementsReplacedWithSemicolon.ts, 5, 2)) + +while (0); + +while (0) + const enum D {} +>D : Symbol(D, Decl(elidedEmbeddedStatementsReplacedWithSemicolon.ts, 9, 9)) + +for (;0;) + const enum E {} +>E : Symbol(E, Decl(elidedEmbeddedStatementsReplacedWithSemicolon.ts, 12, 9)) + +for (let _ in []) +>_ : Symbol(_, Decl(elidedEmbeddedStatementsReplacedWithSemicolon.ts, 15, 8)) + + const enum F {} +>F : Symbol(F, Decl(elidedEmbeddedStatementsReplacedWithSemicolon.ts, 15, 17)) + +for (let _ of []) +>_ : Symbol(_, Decl(elidedEmbeddedStatementsReplacedWithSemicolon.ts, 18, 8)) + + const enum G {} +>G : Symbol(G, Decl(elidedEmbeddedStatementsReplacedWithSemicolon.ts, 18, 17)) + +// @ts-ignore suppress `with` statement error +with (window) +>window : Symbol(window, Decl(lib.dom.d.ts, --, --)) + + const enum H {} diff --git a/tests/baselines/reference/elidedEmbeddedStatementsReplacedWithSemicolon.types b/tests/baselines/reference/elidedEmbeddedStatementsReplacedWithSemicolon.types new file mode 100644 index 00000000000..2c4dc4daeb7 --- /dev/null +++ b/tests/baselines/reference/elidedEmbeddedStatementsReplacedWithSemicolon.types @@ -0,0 +1,51 @@ +=== tests/cases/compiler/elidedEmbeddedStatementsReplacedWithSemicolon.ts === +if (1) +>1 : 1 + + const enum A {} +>A : A + +else + const enum B {} +>B : B + +do + const enum C {} +>C : C + +while (0); +>0 : 0 + +while (0) +>0 : 0 + + const enum D {} +>D : D + +for (;0;) +>0 : 0 + + const enum E {} +>E : E + +for (let _ in []) +>_ : string +>[] : undefined[] + + const enum F {} +>F : F + +for (let _ of []) +>_ : any +>[] : undefined[] + + const enum G {} +>G : G + +// @ts-ignore suppress `with` statement error +with (window) +>window : Window + + const enum H {} +>H : error + diff --git a/tests/baselines/reference/labeledStatementWithLabel.js b/tests/baselines/reference/labeledStatementWithLabel.js index 4d5dc499e25..ada819c9908 100644 --- a/tests/baselines/reference/labeledStatementWithLabel.js +++ b/tests/baselines/reference/labeledStatementWithLabel.js @@ -64,7 +64,7 @@ label: { (function (E) { })(E || (E = {})); } -label: +label: ; label: { var C = /** @class */ (function () { function C() { @@ -75,6 +75,6 @@ label: { label: var a = 1; label: var b = 1; label: var c = 1; -label: -label: +label: ; +label: ; label: diff --git a/tests/baselines/reference/labeledStatementWithLabel_es2015.js b/tests/baselines/reference/labeledStatementWithLabel_es2015.js index e2eea4c53be..34ceb7bc17a 100644 --- a/tests/baselines/reference/labeledStatementWithLabel_es2015.js +++ b/tests/baselines/reference/labeledStatementWithLabel_es2015.js @@ -33,12 +33,12 @@ label: { (function (E) { })(E || (E = {})); } -label: +label: ; label: class C { } label: var a = 1; label: let b = 1; label: const c = 1; -label: -label: +label: ; +label: ; label: diff --git a/tests/baselines/reference/labeledStatementWithLabel_strict.js b/tests/baselines/reference/labeledStatementWithLabel_strict.js index c4ac2caed06..bcf211fdbfd 100644 --- a/tests/baselines/reference/labeledStatementWithLabel_strict.js +++ b/tests/baselines/reference/labeledStatementWithLabel_strict.js @@ -35,12 +35,12 @@ label: { (function (E) { })(E || (E = {})); } -label: +label: ; label: class C { } label: var a = 1; label: let b = 1; label: const c = 1; -label: -label: +label: ; +label: ; label: diff --git a/tests/cases/compiler/elidedEmbeddedStatementsReplacedWithSemicolon.ts b/tests/cases/compiler/elidedEmbeddedStatementsReplacedWithSemicolon.ts new file mode 100644 index 00000000000..dd9f6cc09f3 --- /dev/null +++ b/tests/cases/compiler/elidedEmbeddedStatementsReplacedWithSemicolon.ts @@ -0,0 +1,24 @@ +if (1) + const enum A {} +else + const enum B {} + +do + const enum C {} +while (0); + +while (0) + const enum D {} + +for (;0;) + const enum E {} + +for (let _ in []) + const enum F {} + +for (let _ of []) + const enum G {} + +// @ts-ignore suppress `with` statement error +with (window) + const enum H {} \ No newline at end of file From 055a07ea4aeef266e13e16bc5136f8b87cc0ee49 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Mon, 1 Jul 2019 14:15:30 -0700 Subject: [PATCH 32/36] Check for parse errors in emitted JS (#32009) --- src/harness/harness.ts | 7 +++++++ tests/baselines/reference/emitBOM.js | 16 ++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/harness/harness.ts b/src/harness/harness.ts index f03103d0239..c6842115095 100644 --- a/src/harness/harness.ts +++ b/src/harness/harness.ts @@ -1311,6 +1311,13 @@ namespace Harness { if (jsCode.length && jsCode.charCodeAt(jsCode.length - 1) !== ts.CharacterCodes.lineFeed) { jsCode += "\r\n"; } + if (!result.diagnostics.length && !ts.endsWith(file.file, ts.Extension.Json)) { + const fileParseResult = ts.createSourceFile(file.file, file.text, options.target || ts.ScriptTarget.ES3, /*parentNodes*/ false, ts.endsWith(file.file, "x") ? ts.ScriptKind.JSX : ts.ScriptKind.JS); + if (ts.length(fileParseResult.parseDiagnostics)) { + jsCode += getErrorBaseline([file.asTestFile()], fileParseResult.parseDiagnostics); + return; + } + } jsCode += fileOutput(file, harnessSettings); }); diff --git a/tests/baselines/reference/emitBOM.js b/tests/baselines/reference/emitBOM.js index 3f3d61fd2f9..2890ba0d81d 100644 --- a/tests/baselines/reference/emitBOM.js +++ b/tests/baselines/reference/emitBOM.js @@ -2,10 +2,18 @@ // JS and d.ts output should have a BOM but not the sourcemap var x; -//// [emitBOM.js] -// JS and d.ts output should have a BOM but not the sourcemap -var x; -//# sourceMappingURL=emitBOM.js.map +tests/cases/compiler/emitBOM.js(1,2): error TS1127: Invalid character. +tests/cases/compiler/emitBOM.js(1,3): error TS1127: Invalid character. + + +==== tests/cases/compiler/emitBOM.js (2 errors) ==== + // JS and d.ts output should have a BOM but not the sourcemap + +!!! error TS1127: Invalid character. + +!!! error TS1127: Invalid character. + var x; + //# sourceMappingURL=emitBOM.js.map //// [emitBOM.d.ts] declare var x: any; From 3e6856137ad2618dcdfe13ee49a06cca8e4d7ee2 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Mon, 1 Jul 2019 14:56:57 -0700 Subject: [PATCH 33/36] Add support for sharding tests across multiple workers (#32173) * Add support for sharding tests across multiple workers * Disable unittests when runners are expressly provided (unless they contain the unittest runner) --- Gulpfile.js | 4 ++++ scripts/build/options.js | 2 +- scripts/build/tests.js | 14 ++++++++++---- src/harness/harness.ts | 2 +- src/harness/runnerbase.ts | 11 +++++++++++ src/testRunner/externalCompileRunner.ts | 4 ++-- src/testRunner/parallel/host.ts | 2 +- src/testRunner/projectsRunner.ts | 6 +++++- src/testRunner/runner.ts | 11 +++++++++++ src/testRunner/rwcRunner.ts | 2 +- src/testRunner/test262Runner.ts | 2 +- 11 files changed, 48 insertions(+), 12 deletions(-) diff --git a/Gulpfile.js b/Gulpfile.js index a8f5748271d..42987e4fd8d 100644 --- a/Gulpfile.js +++ b/Gulpfile.js @@ -415,6 +415,8 @@ task("runtests").flags = { " --no-lint": "Disables lint", " --timeout=": "Overrides the default test timeout.", " --built": "Compile using the built version of the compiler.", + " --shards": "Total number of shards running tests (default: 1)", + " --shardId": "1-based ID of this shard (default: 1)", } const runTestsParallel = () => runConsoleTests("built/local/run.js", "min", /*runInParallel*/ true, /*watchMode*/ false); @@ -430,6 +432,8 @@ task("runtests-parallel").flags = { " --timeout=": "Overrides the default test timeout.", " --built": "Compile using the built version of the compiler.", " --skipPercent=": "Skip expensive tests with chance to miss an edit. Default 5%.", + " --shards": "Total number of shards running tests (default: 1)", + " --shardId": "1-based ID of this shard (default: 1)", }; task("diff", () => exec(getDiffTool(), [refBaseline, localBaseline], { ignoreExitCode: true })); diff --git a/scripts/build/options.js b/scripts/build/options.js index c93a265ff88..fecac01dd05 100644 --- a/scripts/build/options.js +++ b/scripts/build/options.js @@ -5,7 +5,7 @@ const os = require("os"); /** @type {CommandLineOptions} */ module.exports = minimist(process.argv.slice(2), { boolean: ["debug", "dirty", "inspect", "light", "colors", "lint", "lkg", "soft", "fix", "failed", "keepFailed", "force", "built"], - string: ["browser", "tests", "host", "reporter", "stackTraceLimit", "timeout"], + string: ["browser", "tests", "host", "reporter", "stackTraceLimit", "timeout", "shards", "shardId"], alias: { "b": "browser", "d": "debug", "debug-brk": "debug", diff --git a/scripts/build/tests.js b/scripts/build/tests.js index a15eb17093d..20d2a4c7c2a 100644 --- a/scripts/build/tests.js +++ b/scripts/build/tests.js @@ -36,6 +36,8 @@ async function runConsoleTests(runJs, defaultReporter, runInParallel, watchMode, const testConfigFile = "test.config"; const failed = cmdLineOptions.failed; const keepFailed = cmdLineOptions.keepFailed; + const shards = +cmdLineOptions.shards || undefined; + const shardId = +cmdLineOptions.shardId || undefined; if (!cmdLineOptions.dirty) { await cleanTestDirs(); cancelToken.throwIfCancellationRequested(); @@ -63,8 +65,8 @@ async function runConsoleTests(runJs, defaultReporter, runInParallel, watchMode, testTimeout = 400000; } - if (tests || runners || light || testTimeout || taskConfigsFolder || keepFailed || skipPercent !== undefined) { - writeTestConfigFile(tests, runners, light, skipPercent, taskConfigsFolder, workerCount, stackTraceLimit, testTimeout, keepFailed); + if (tests || runners || light || testTimeout || taskConfigsFolder || keepFailed || skipPercent !== undefined || shards || shardId) { + writeTestConfigFile(tests, runners, light, skipPercent, taskConfigsFolder, workerCount, stackTraceLimit, testTimeout, keepFailed, shards, shardId); } const colors = cmdLineOptions.colors; @@ -165,8 +167,10 @@ exports.cleanTestDirs = cleanTestDirs; * @param {string} [stackTraceLimit] * @param {string | number} [timeout] * @param {boolean} [keepFailed] + * @param {number | undefined} [shards] + * @param {number | undefined} [shardId] */ -function writeTestConfigFile(tests, runners, light, skipPercent, taskConfigsFolder, workerCount, stackTraceLimit, timeout, keepFailed) { +function writeTestConfigFile(tests, runners, light, skipPercent, taskConfigsFolder, workerCount, stackTraceLimit, timeout, keepFailed, shards, shardId) { const testConfigContents = JSON.stringify({ test: tests ? [tests] : undefined, runners: runners ? runners.split(",") : undefined, @@ -177,7 +181,9 @@ function writeTestConfigFile(tests, runners, light, skipPercent, taskConfigsFold taskConfigsFolder, noColor: !cmdLineOptions.colors, timeout, - keepFailed + keepFailed, + shards, + shardId }); log.info("Running tests with config: " + testConfigContents); fs.writeFileSync("test.config", testConfigContents); diff --git a/src/harness/harness.ts b/src/harness/harness.ts index c6842115095..fe5ec344322 100644 --- a/src/harness/harness.ts +++ b/src/harness/harness.ts @@ -501,7 +501,7 @@ namespace Harness { } function enumerateTestFiles(runner: RunnerBase) { - return runner.enumerateTestFiles(); + return runner.getTestFiles(); } function listFiles(path: string, spec: RegExp, options: { recursive?: boolean } = {}) { diff --git a/src/harness/runnerbase.ts b/src/harness/runnerbase.ts index ce56772927e..70045c54c80 100644 --- a/src/harness/runnerbase.ts +++ b/src/harness/runnerbase.ts @@ -2,6 +2,9 @@ type TestRunnerKind = CompilerTestKind | FourslashTestKind | "project" | "rwc" | type CompilerTestKind = "conformance" | "compiler"; type FourslashTestKind = "fourslash" | "fourslash-shims" | "fourslash-shims-pp" | "fourslash-server"; +let shards = 1; +let shardId = 1; + abstract class RunnerBase { // contains the tests to run public tests: (string | Harness.FileBasedTest)[] = []; @@ -19,6 +22,14 @@ abstract class RunnerBase { abstract enumerateTestFiles(): (string | Harness.FileBasedTest)[]; + getTestFiles(): ReturnType { + const all = this.enumerateTestFiles(); + if (shards === 1) { + return all as ReturnType; + } + return all.filter((_val, idx) => idx % shards === (shardId - 1)) as ReturnType; + } + /** The working directory where tests are found. Needed for batch testing where the input path will differ from the output path inside baselines */ public workingDirectory = ""; diff --git a/src/testRunner/externalCompileRunner.ts b/src/testRunner/externalCompileRunner.ts index 4be0d1a67ab..dbe7bc5854f 100644 --- a/src/testRunner/externalCompileRunner.ts +++ b/src/testRunner/externalCompileRunner.ts @@ -24,7 +24,7 @@ abstract class ExternalCompileRunnerBase extends RunnerBase { */ initializeTests(): void { // Read in and evaluate the test list - const testList = this.tests && this.tests.length ? this.tests : this.enumerateTestFiles(); + const testList = this.tests && this.tests.length ? this.tests : this.getTestFiles(); // tslint:disable-next-line:no-this-assignment const cls = this; @@ -113,7 +113,7 @@ class DockerfileRunner extends ExternalCompileRunnerBase { } initializeTests(): void { // Read in and evaluate the test list - const testList = this.tests && this.tests.length ? this.tests : this.enumerateTestFiles(); + const testList = this.tests && this.tests.length ? this.tests : this.getTestFiles(); // tslint:disable-next-line:no-this-assignment const cls = this; diff --git a/src/testRunner/parallel/host.ts b/src/testRunner/parallel/host.ts index 7780cfbd646..ee66fd738b0 100644 --- a/src/testRunner/parallel/host.ts +++ b/src/testRunner/parallel/host.ts @@ -222,7 +222,7 @@ namespace Harness.Parallel.Host { console.log("Discovering runner-based tests..."); const discoverStart = +(new Date()); for (const runner of runners) { - for (const test of runner.enumerateTestFiles()) { + for (const test of runner.getTestFiles()) { const file = typeof test === "string" ? test : test.file; let size: number; if (!perfData) { diff --git a/src/testRunner/projectsRunner.ts b/src/testRunner/projectsRunner.ts index f4e51afab4c..ea8efd838d4 100644 --- a/src/testRunner/projectsRunner.ts +++ b/src/testRunner/projectsRunner.ts @@ -32,7 +32,11 @@ namespace project { export class ProjectRunner extends RunnerBase { public enumerateTestFiles() { - return this.enumerateFiles("tests/cases/project", /\.json$/, { recursive: true }); + const all = this.enumerateFiles("tests/cases/project", /\.json$/, { recursive: true }); + if (shards === 1) { + return all; + } + return all.filter((_val, idx) => idx % shards === (shardId - 1)); } public kind(): TestRunnerKind { diff --git a/src/testRunner/runner.ts b/src/testRunner/runner.ts index 685937196cb..3532f972230 100644 --- a/src/testRunner/runner.ts +++ b/src/testRunner/runner.ts @@ -80,6 +80,8 @@ interface TestConfig { timeout?: number; keepFailed?: boolean; skipPercent?: number; + shardId?: number; + shards?: number; } interface TaskSet { @@ -114,6 +116,12 @@ function handleTestConfig() { if (testConfig.skipPercent !== undefined) { skipPercent = testConfig.skipPercent; } + if (testConfig.shardId) { + shardId = testConfig.shardId; + } + if (testConfig.shards) { + shards = testConfig.shards; + } if (testConfig.stackTraceLimit === "full") { (Error).stackTraceLimit = Infinity; @@ -129,6 +137,9 @@ function handleTestConfig() { const runnerConfig = testConfig.runners || testConfig.test; if (runnerConfig && runnerConfig.length > 0) { + if (testConfig.runners) { + runUnitTests = runnerConfig.indexOf("unittest") !== -1; + } for (const option of runnerConfig) { if (!option) { continue; diff --git a/src/testRunner/rwcRunner.ts b/src/testRunner/rwcRunner.ts index 729ed167fff..b510b98668a 100644 --- a/src/testRunner/rwcRunner.ts +++ b/src/testRunner/rwcRunner.ts @@ -225,7 +225,7 @@ class RWCRunner extends RunnerBase { */ public initializeTests(): void { // Read in and evaluate the test list - for (const test of this.tests && this.tests.length ? this.tests : this.enumerateTestFiles()) { + for (const test of this.tests && this.tests.length ? this.tests : this.getTestFiles()) { this.runTest(typeof test === "string" ? test : test.file); } } diff --git a/src/testRunner/test262Runner.ts b/src/testRunner/test262Runner.ts index 3edb065b325..c435c3e23ca 100644 --- a/src/testRunner/test262Runner.ts +++ b/src/testRunner/test262Runner.ts @@ -97,7 +97,7 @@ class Test262BaselineRunner extends RunnerBase { public initializeTests() { // this will set up a series of describe/it blocks to run between the setup and cleanup phases if (this.tests.length === 0) { - const testFiles = this.enumerateTestFiles(); + const testFiles = this.getTestFiles(); testFiles.forEach(fn => { this.runTest(fn); }); From 5b24ea80a74dcb73cef336c2ee06957b858c2c89 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Mon, 1 Jul 2019 17:46:50 -1000 Subject: [PATCH 34/36] Restore union-like behavior for inference to conditional types --- src/compiler/checker.ts | 60 ++++++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 28 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 92df91d0084..893e7901d64 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -15354,36 +15354,11 @@ namespace ts { inferFromTypes(getFalseTypeFromConditionalType(source), getFalseTypeFromConditionalType(target)); } else if (target.flags & TypeFlags.Conditional && !contravariant) { - inferFromTypes(source, getTrueTypeFromConditionalType(target)); - inferFromTypes(source, getFalseTypeFromConditionalType(target)); + const targetTypes = [getTrueTypeFromConditionalType(target), getFalseTypeFromConditionalType(target)]; + inferToMultipleTypes(source, targetTypes, /*isIntersection*/ false); } else if (target.flags & TypeFlags.UnionOrIntersection) { - // We infer from types that are not naked type variables first so that inferences we - // make from nested naked type variables and given slightly higher priority by virtue - // of being first in the candidates array. - let typeVariableCount = 0; - for (const t of (target).types) { - if (getInferenceInfoForType(t)) { - typeVariableCount++; - } - else { - inferFromTypes(source, t); - } - } - // Inferences directly to naked type variables are given lower priority as they are - // less specific. For example, when inferring from Promise to T | Promise, - // we want to infer string for T, not Promise | string. For intersection types - // we only infer to single naked type variables. - if (target.flags & TypeFlags.Union ? typeVariableCount !== 0 : typeVariableCount === 1) { - const savePriority = priority; - priority |= InferencePriority.NakedTypeVariable; - for (const t of (target).types) { - if (getInferenceInfoForType(t)) { - inferFromTypes(source, t); - } - } - priority = savePriority; - } + inferToMultipleTypes(source, (target).types, !!(target.flags & TypeFlags.Intersection)); } else if (source.flags & TypeFlags.Union) { // Source is a union or intersection type, infer from each constituent type @@ -15481,6 +15456,35 @@ namespace ts { return undefined; } + function inferToMultipleTypes(source: Type, targets: Type[], isIntersection: boolean) { + // We infer from types that are not naked type variables first so that inferences we + // make from nested naked type variables and given slightly higher priority by virtue + // of being first in the candidates array. + let typeVariableCount = 0; + for (const t of targets) { + if (getInferenceInfoForType(t)) { + typeVariableCount++; + } + else { + inferFromTypes(source, t); + } + } + // Inferences directly to naked type variables are given lower priority as they are + // less specific. For example, when inferring from Promise to T | Promise, + // we want to infer string for T, not Promise | string. For intersection types + // we only infer to single naked type variables. + if (isIntersection ? typeVariableCount === 1 : typeVariableCount !== 0) { + const savePriority = priority; + priority |= InferencePriority.NakedTypeVariable; + for (const t of targets) { + if (getInferenceInfoForType(t)) { + inferFromTypes(source, t); + } + } + priority = savePriority; + } + } + function inferToMappedType(source: Type, target: MappedType, constraintType: Type): boolean { if (constraintType.flags & TypeFlags.Union) { let result = false; From 8e75382ce3a8aff1783efd2f9fa5e35da241daf9 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Mon, 1 Jul 2019 17:49:36 -1000 Subject: [PATCH 35/36] Add regression test --- ...onalTypeRelaxingConstraintAssignability.js | 19 +++++++- ...ypeRelaxingConstraintAssignability.symbols | 44 +++++++++++++++++++ ...lTypeRelaxingConstraintAssignability.types | 27 ++++++++++++ ...onalTypeRelaxingConstraintAssignability.ts | 15 ++++++- 4 files changed, 103 insertions(+), 2 deletions(-) diff --git a/tests/baselines/reference/conditionalTypeRelaxingConstraintAssignability.js b/tests/baselines/reference/conditionalTypeRelaxingConstraintAssignability.js index f066b18d5c6..5f142116bab 100644 --- a/tests/baselines/reference/conditionalTypeRelaxingConstraintAssignability.js +++ b/tests/baselines/reference/conditionalTypeRelaxingConstraintAssignability.js @@ -21,7 +21,21 @@ export class Elem< new Elem(undefined as ElChildren.Void); new Elem('' as ElChildren.Text); new Elem('' as ElChildren.Void | ElChildren.Text); // error -new Elem('' as ElChildren); // error +new Elem('' as ElChildren); // error + +// Repro from #31766 + +interface I { a: string } + +type DeepPartial = + T extends object ? {[K in keyof T]?: DeepPartial} : T; + +declare function f(t: T, partial: DeepPartial): T; + +function g(p1: I, p2: Partial): I { + return f(p1, p2); +} + //// [conditionalTypeRelaxingConstraintAssignability.js] "use strict"; @@ -37,3 +51,6 @@ new Elem(undefined); new Elem(''); new Elem(''); // error new Elem(''); // error +function g(p1, p2) { + return f(p1, p2); +} diff --git a/tests/baselines/reference/conditionalTypeRelaxingConstraintAssignability.symbols b/tests/baselines/reference/conditionalTypeRelaxingConstraintAssignability.symbols index 7ce85b0fbfa..cd526f9d4bc 100644 --- a/tests/baselines/reference/conditionalTypeRelaxingConstraintAssignability.symbols +++ b/tests/baselines/reference/conditionalTypeRelaxingConstraintAssignability.symbols @@ -71,3 +71,47 @@ new Elem('' as ElChildren); // error >Elem : Symbol(Elem, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 8, 83)) >ElChildren : Symbol(ElChildren, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 0, 0), Decl(conditionalTypeRelaxingConstraintAssignability.ts, 2, 20)) +// Repro from #31766 + +interface I { a: string } +>I : Symbol(I, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 22, 27)) +>a : Symbol(I.a, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 26, 13)) + +type DeepPartial = +>DeepPartial : Symbol(DeepPartial, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 26, 25)) +>T : Symbol(T, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 28, 17)) + + T extends object ? {[K in keyof T]?: DeepPartial} : T; +>T : Symbol(T, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 28, 17)) +>K : Symbol(K, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 29, 25)) +>T : Symbol(T, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 28, 17)) +>DeepPartial : Symbol(DeepPartial, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 26, 25)) +>T : Symbol(T, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 28, 17)) +>K : Symbol(K, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 29, 25)) +>T : Symbol(T, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 28, 17)) + +declare function f(t: T, partial: DeepPartial): T; +>f : Symbol(f, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 29, 64)) +>T : Symbol(T, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 31, 19)) +>t : Symbol(t, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 31, 22)) +>T : Symbol(T, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 31, 19)) +>partial : Symbol(partial, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 31, 27)) +>DeepPartial : Symbol(DeepPartial, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 26, 25)) +>T : Symbol(T, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 31, 19)) +>T : Symbol(T, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 31, 19)) + +function g(p1: I, p2: Partial): I { +>g : Symbol(g, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 31, 56)) +>p1 : Symbol(p1, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 33, 11)) +>I : Symbol(I, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 22, 27)) +>p2 : Symbol(p2, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 33, 17)) +>Partial : Symbol(Partial, Decl(lib.es5.d.ts, --, --)) +>I : Symbol(I, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 22, 27)) +>I : Symbol(I, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 22, 27)) + + return f(p1, p2); +>f : Symbol(f, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 29, 64)) +>p1 : Symbol(p1, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 33, 11)) +>p2 : Symbol(p2, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 33, 17)) +} + diff --git a/tests/baselines/reference/conditionalTypeRelaxingConstraintAssignability.types b/tests/baselines/reference/conditionalTypeRelaxingConstraintAssignability.types index c827e26bddb..2df682290f5 100644 --- a/tests/baselines/reference/conditionalTypeRelaxingConstraintAssignability.types +++ b/tests/baselines/reference/conditionalTypeRelaxingConstraintAssignability.types @@ -62,3 +62,30 @@ new Elem('' as ElChildren); // error >'' as ElChildren : ElChildren >'' : "" +// Repro from #31766 + +interface I { a: string } +>a : string + +type DeepPartial = +>DeepPartial : DeepPartial + + T extends object ? {[K in keyof T]?: DeepPartial} : T; + +declare function f(t: T, partial: DeepPartial): T; +>f : (t: T, partial: DeepPartial) => T +>t : T +>partial : DeepPartial + +function g(p1: I, p2: Partial): I { +>g : (p1: I, p2: Partial) => I +>p1 : I +>p2 : Partial + + return f(p1, p2); +>f(p1, p2) : I +>f : (t: T, partial: DeepPartial) => T +>p1 : I +>p2 : Partial +} + diff --git a/tests/cases/compiler/conditionalTypeRelaxingConstraintAssignability.ts b/tests/cases/compiler/conditionalTypeRelaxingConstraintAssignability.ts index 2f18e464e3b..04eaee9b511 100644 --- a/tests/cases/compiler/conditionalTypeRelaxingConstraintAssignability.ts +++ b/tests/cases/compiler/conditionalTypeRelaxingConstraintAssignability.ts @@ -21,4 +21,17 @@ export class Elem< new Elem(undefined as ElChildren.Void); new Elem('' as ElChildren.Text); new Elem('' as ElChildren.Void | ElChildren.Text); // error -new Elem('' as ElChildren); // error \ No newline at end of file +new Elem('' as ElChildren); // error + +// Repro from #31766 + +interface I { a: string } + +type DeepPartial = + T extends object ? {[K in keyof T]?: DeepPartial} : T; + +declare function f(t: T, partial: DeepPartial): T; + +function g(p1: I, p2: Partial): I { + return f(p1, p2); +} From b24264f7685477d99dd9b324b0043559d41fb9ec Mon Sep 17 00:00:00 2001 From: typescript-bot Date: Tue, 2 Jul 2019 13:55:12 +0000 Subject: [PATCH 36/36] Update user baselines --- tests/baselines/reference/user/chrome-devtools-frontend.log | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/baselines/reference/user/chrome-devtools-frontend.log b/tests/baselines/reference/user/chrome-devtools-frontend.log index d298b174de0..228ae3113bd 100644 --- a/tests/baselines/reference/user/chrome-devtools-frontend.log +++ b/tests/baselines/reference/user/chrome-devtools-frontend.log @@ -6841,7 +6841,6 @@ node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerDetailsView.js node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerDetailsView.js(198,65): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerDetailsView.js(199,53): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerDetailsView.js(200,52): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerDetailsView.js(239,3): error TS2322: Type 'symbol' is not assignable to type 'string'. node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerDetailsView.js(246,25): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerDetailsView.js(247,19): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerDetailsView.js(248,20): error TS2555: Expected at least 2 arguments, but got 1. @@ -6934,8 +6933,6 @@ node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(718 node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(726,44): error TS2339: Property 'clientX' does not exist on type 'Event'. node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(727,24): error TS2339: Property 'clientY' does not exist on type 'Event'. node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(762,26): error TS2339: Property 'LayerStyle' does not exist on type 'typeof Layers3DView'. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(777,3): error TS2322: Type 'symbol' is not assignable to type 'string'. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(778,3): error TS2322: Type 'symbol' is not assignable to type 'string'. node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(794,28): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(795,29): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(796,29): error TS2555: Expected at least 2 arguments, but got 1.